std:: text_encoding
|
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:
- Nombre principal : El nombre oficial especificado en el registro.
- Alias : Un superconjunto definido por la implementación de alias del registro.
- 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) |
|
|
[static]
|
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
|
(C++26)
|
compara dos objetos
text_encoding
.
(función miembro pública) |
Clases auxiliares
|
(C++26)
|
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) |