Namespaces
Variants

std:: text_encoding

From cppreference.net
Definido en el encabezado <text_encoding>
struct text_encoding ;
(desde C++26)

La clase text_encoding proporciona un mecanismo para identificar codificaciones de caracteres. Se utiliza para determinar la codificación de literales de caracteres ordinarios del entorno de traducción en tiempo de compilación y la codificación de caracteres del entorno de ejecución en tiempo de ejecución.

Cada text_encoding encapsula un esquema de codificación de caracteres , identificado de forma única por un enumerador en text_encoding::id y un nombre correspondiente representado por una cadena de bytes terminada en nulo. Estos pueden accederse mediante las funciones miembro mib() y name() , respectivamente. La determinación de si un objeto representa un esquema de codificación de caracteres implementado en el entorno de traducción o ejecución está definida por la implementación.

La clase text_encoding es un tipo TriviallyCopyable . El objeto array que representa el nombre correspondiente del esquema de codificación de caracteres está anidado dentro del objeto text_encoding mismo. El nombre almacenado está limitado a un máximo de max_name_length caracteres excluyendo el carácter nulo ' \0 ' .

La clase admite tanto codificaciones de caracteres registradas como no registradas. Las codificaciones registradas son aquellas que se encuentran en el Registro de Conjuntos de Caracteres de IANA excluyendo las siguientes codificaciones de caracteres:

  • NATS-DANO (33)
  • NATS-DANO-ADD (34).

Además, la clase proporciona acceso para codificaciones de caracteres registradas a:

  1. Nombre principal : El nombre oficial especificado en el registro.
  2. Alias : Un superconjunto definido por la implementación de alias del registro.
  3. Valor MIBenum : Un identificador único para usar en la identificación de codificaciones de caracteres codificadas.

Las codificaciones no registradas pueden representarse con un enumerador id :: other o id :: unknown y un nombre personalizado.

Un objeto text_encoding e cuyo valor MIBenum no es ni id :: other ni id :: unknown mantiene las siguientes invariantes:

  • * e. name ( ) ! = ' \0 ' es true , y
  • e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) es true .

Contenidos

Tipos de miembros

representa el valor MIBenum de la codificación de caracteres
(miembro de enumeración público)
una view sobre los alias de la codificación de caracteres
(clase miembro pública)

Constante miembro

Nombre Valor
constexpr std:: size_t max_name_length
[static]
63
(constante de miembro público estático)

Miembros de datos

Miembro Descripción
std :: text_encoding :: id mib_ (privado) un valor MIBenum con id :: unknown como valor predeterminado
( objeto miembro solo-exposición* )
char [ max_name_length + 1 ] name_ (privado) un nombre principal almacenado
( objeto miembro solo-exposición* )

Funciones miembro

Creación
construye un nuevo objeto text_encoding
(función miembro pública)
[static]
construye un nuevo text_encoding que representa la codificación de literales de caracteres ordinarios
(función miembro estática pública)
[static]
construye un nuevo text_encoding que representa el esquema de codificación de caracteres definido por la implementación del entorno de ejecución
(función miembro estática pública)
Observadores
devuelve el valor MIBenum de la codificación de caracteres actual
(función miembro pública)
devuelve el nombre principal de la codificación de caracteres actual
(función miembro pública)
devuelve una view sobre los alias de la codificación de caracteres actual
(función miembro pública)
verifica el esquema de codificación de caracteres del entorno de ejecución con el valor MIB especificado
(función miembro estática pública)
Ayudantes
[static] (private)
compara dos nombres de alias usando Charset Alias Matching
( función miembro estática solo para exposición* )

Funciones no miembro

compara dos objetos text_encoding .
(función miembro pública)

Clases auxiliares

soporte de hash para std::text_encoding
(especialización de plantilla de clase)

Notas

Al trabajar con codificaciones de caracteres, es importante tener en cuenta que los nombres principales o alias de dos codificaciones de caracteres registradas distintas no son equivalentes cuando se comparan utilizando Charset Alias Matching como se describe en el Estándar Técnico Unicode.

Por conveniencia, los enumeradores de text_encoding::id se introducen como miembros de text_encoding y pueden accederse directamente. Esto significa que text_encoding :: ASCII y text_encoding :: id :: ASCII se refieren a la misma entidad.

Se recomienda que la implementación trate las codificaciones registradas como no intercambiables. Además, el nombre principal de una codificación registrada no debe utilizarse para describir una codificación no registrada similar pero diferente, a menos que exista un precedente claro para hacerlo.

Macro de prueba de características Valor Std Característica
__cpp_lib_text_encoding 202306L (C++26) std::text_encoding

Ejemplo

#include <locale>
#include <print>
#include <text_encoding>
int main()
{
    // la codificación literal se conoce en tiempo de compilación
    constexpr std::text_encoding literal_encoding = std::text_encoding::literal();
    // verificar la codificación literal
    static_assert(literal_encoding.mib() != std::text_encoding::other &&
                  literal_encoding.mib() != std::text_encoding::unknown);
    // la codificación del entorno solo se conoce en tiempo de ejecución
    std::text_encoding env_encoding = std::text_encoding::environment();
    // codificación asociada de la configuración regional predeterminada
    std::text_encoding locale_encoding = std::locale("").encoding();
    std::println("The literal encoding is {}", literal_encoding.name());
    std::println("The aliases of literal encoding:");
    for (const char* alias_name : literal_encoding.aliases())
        std::println(" -> {}", alias_name);
    if (env_encoding == locale_encoding)
        std::println("Both environment and locale encodings are the same");
    std::println("The environment encoding is {}", env_encoding.name());
    std::println("The aliases of environment encoding:");
    for (const char* alias_name : env_encoding.aliases())
        std::println(" -> {}", alias_name);
}

Salida posible:

The literal encoding is UTF-8
The aliases of literal encoding:
 -> UTF-8
 -> csUTF8
Both environment and locale encodings are the same
The environment encoding is ANSI_X3.4-1968
The aliases of environment encoding:
 -> US-ASCII
 -> iso-ir-6
 -> ANSI_X3.4-1968
 -> ANSI_X3.4-1986
 -> ISO_646.irv:1991
 -> ISO646-US
 -> us
 -> IBM367
 -> cp367
 -> csASCII
 -> ASCII

Véase también

conjunto de facetas polimórficas que encapsulan diferencias culturales
(clase)