Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

Una cadena multibyte terminada en nulo (NTMBS), o "cadena multibyte", es una secuencia de bytes distintos de cero seguida de un byte con valor cero (el carácter nulo terminador).

Cada carácter almacenado en la cadena puede ocupar más de un byte. La codificación utilizada para representar caracteres en una cadena de caracteres multibyte es específica de la configuración regional: puede ser UTF-8, GB18030, EUC-JP, Shift-JIS, etc. Por ejemplo, el array de caracteres { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } es un NTMBS que contiene la cadena "你好" en codificación multibyte UTF-8: los primeros tres bytes codifican el carácter 你, los siguientes tres bytes codifican el carácter 好. La misma cadena codificada en GB18030 es el array de caracteres { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } , donde cada uno de los dos caracteres se codifica como una secuencia de dos bytes.

En algunas codificaciones multibyte, cualquier secuencia de caracteres multibyte dada puede representar diferentes caracteres dependiendo de las secuencias de bytes anteriores, conocidas como "secuencias de cambio". Tales codificaciones se conocen como dependientes del estado: se requiere conocimiento del estado de cambio actual para interpretar cada carácter. Un NTMBS solo es válido si comienza y termina en el estado de cambio inicial: si se utilizó una secuencia de cambio, la secuencia de desbloqueo correspondiente debe estar presente antes del carácter nulo de terminación. Ejemplos de tales codificaciones son JIS de 7 bits, BOCU-1 y SCSU .

Una cadena de caracteres multibyte es compatible en diseño con una cadena de bytes terminada en nulo (NTBS), es decir, puede almacenarse, copiarse y examinarse utilizando las mismas facilidades, excepto para calcular el número de caracteres. Si la configuración regional correcta está en efecto, las funciones de E/S también manejan cadenas multibyte. Las cadenas multibyte pueden convertirse hacia y desde cadenas anchas utilizando las funciones miembro de std::codecvt , std::wstring_convert , o las siguientes funciones de conversión dependientes de la configuración regional:

Contenidos

Funciones

Conversiones de caracteres multibyte/ancho
Definido en el encabezado <cstdlib>
devuelve el número de bytes en el siguiente carácter multibyte
(función)
convierte el siguiente carácter multibyte a carácter ancho
(función)
convierte un carácter ancho a su representación multibyte
(función)
convierte una cadena de caracteres multibyte estrechos a cadena ancha
(función)
convierte una cadena ancha a cadena de caracteres multibyte estrechos
(función)
Definido en el encabezado <cwchar>
devuelve el número de bytes en el siguiente carácter multibyte, dado el estado
(función)
verifica si el objeto std::mbstate_t representa el estado de desplazamiento inicial
(función)
amplía un carácter estrecho de un solo byte a carácter ancho, si es posible
(función)
reduce un carácter ancho a un carácter estrecho de un solo byte, si es posible
(función)
convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función)
convierte un carácter ancho a su representación multibyte, dado el estado
(función)
convierte una cadena de caracteres multibyte estrechos a cadena ancha, dado el estado
(función)
convierte una cadena ancha a cadena de caracteres multibyte estrechos, dado el estado
(función)
Definido en el encabezado <cuchar>
(C++20)
convierte un carácter multibyte estrecho a codificación UTF-8
(función)
(C++20)
convierte una cadena UTF-8 a codificación multibyte estrecha
(función)
(C++11)
convierte un carácter multibyte estrecho a codificación UTF-16
(función)
(C++11)
convierte un carácter UTF-16 a codificación multibyte estrecha
(función)
(C++11)
convierte un carácter multibyte estrecho a codificación UTF-32
(función)
(C++11)
convierte un carácter UTF-32 a codificación multibyte estrecha
(función)

Tipos

Definido en el encabezado <cwchar>
información de estado de conversión necesaria para iterar cadenas de caracteres multibyte
(clase)

Macros

Definido en el encabezado <climits>
MB_LEN_MAX
número máximo de bytes en un carácter multibyte
(constante macro)
Definido en el encabezado <cstdlib>
MB_CUR_MAX
número máximo de bytes en un carácter multibyte en la configuración regional actual de C
(variable macro)
Definido en el encabezado <cuchar>
__STDC_UTF_16__
(C++11)
indica que se utiliza codificación UTF-16 por mbrtoc16 y c16rtomb
(constante macro)
__STDC_UTF_32__
(C++11)
indica que se utiliza codificación UTF-32 por mbrtoc32 y c32rtomb
(constante macro)

Véase también

Documentación de C para Cadenas multibyte terminadas en nulo