tag metaetiquetas etiquetas ejemplos utf-8 terminology multibyte

utf 8 - metaetiquetas - ¿Qué es un juego de caracteres multibyte?



meta tags ejemplos (9)

El término multibyte se refiere a un juego de caracteres cuyos caracteres pueden, pero no tienen que ser, más ancho que 1 byte (por ejemplo, UTF-8) o se refiere a conjuntos de caracteres que son, en cualquier caso, más anchos que 1 byte (por ejemplo, UTF -dieciséis) ? En otras palabras: ¿qué se entiende si alguien habla de conjuntos de caracteres multibyte?


¿Qué se entiende si alguien habla de conjuntos de caracteres multibyte?

¡Eso, como de costumbre, depende de quién está hablando!

Lógicamente, debe incluir UTF-8, Shift-JIS, GB, etc .: las codificaciones de longitud variable. UTF-16 a menudo no se consideraría en este grupo (aunque sea de alguna manera, con los sustitutos, y ciertamente es múltiple cuando se codifica en bytes a través de UTF-16LE / UTF-16BE).

Pero en Microsoftland, el término se usaría más típicamente para referirse a una página de códigos del sistema predeterminada de longitud variable (para las aplicaciones heredadas que no son Unicode, de las cuales lamentablemente aún hay muchas). En este uso, UTF-8 y UTF-16LE / UTF-16BE no se pueden incluir porque la página de códigos del sistema en Windows no se puede establecer en ninguna de estas codificaciones.

De hecho, en algunos casos, "mbcs" no es más que un sinónimo de la página de códigos del sistema, conocida (incluso más engañosamente) como "ANSI". En este caso, un juego de caracteres "multibyte" podría ser algo tan trivial como cp1252 Western European, que solo usa un byte por personaje.

Mi consejo: use "longitud variable" cuando quiera decir eso, y evite el término ambiguo "multibyte"; cuando alguien más lo use, tendrá que solicitar una aclaración, pero normalmente alguien con antecedentes de Windows hablará de una página de código heredada de Asia oriental como cp932 (Shift-JIS) y no de UTF.


Un juego de caracteres multibyte puede consistir en caracteres de un byte y de dos bytes. Por lo tanto, una cadena de caracteres multibyte puede contener una mezcla de caracteres de un solo byte y de doble byte.

Ref .: Conjuntos de caracteres de un solo byte y multibyte


El primero, aunque el término "codificación de longitud variable" sería más apropiado.


El término es ambiguo, pero en mi trabajo de internacionalización, normalmente evitamos el término "conjuntos de caracteres multibyte" para referirnos a codificaciones basadas en Unicode. En general, utilizamos el término solo para esquemas de codificación heredados que tenían uno o más bytes para definir cada carácter (excepto las codificaciones que requieren solo un byte por carácter).

Por lo general, se incluyen Shift-jis, jis, euc-jp, euc-kr, junto con las codificaciones chinas.

La mayoría de las codificaciones heredadas, con algunas excepciones, requieren una especie de modelo de máquina de estado (o, más simplemente, un modelo de intercambio de páginas) para procesar, y retroceder en una secuencia de texto es complicado y propenso a errores. UTF-8 y UTF-16 no sufren este problema, ya que UTF-8 se puede probar con una máscara de bits y UTF-16 se puede probar contra un rango de pares de sustitución, por lo que avanzar y retroceder en un documento no patológico puede hacerse con seguridad sin mayor complejidad.

Algunas codificaciones heredadas, para idiomas como el tailandés y el vietnamita, tienen algo de la complejidad de los juegos de caracteres multibyte, pero en realidad solo se basan en la combinación de caracteres, y generalmente no se agrupan con el término amplio "multibyte".


Generalmente lo uso para referirme a cualquier personaje que pueda tener más de un byte por personaje.



Todos los juegos de caracteres donde no tienes un mapeo de 1 byte = 1 personaje. Todas las variantes Unicode, pero también los conjuntos de caracteres asiáticos son multibyte.

Para obtener más información, sugiero leer este artículo de Wikipedia .


UTF-8 es multi-byte, lo que significa que cada carácter inglés (ASCII) se almacena en 1 byte, mientras que caracteres no ingleses como chino, tailandés, se almacenan en 3 bytes. Cuando mezcla chino / tailandés con inglés, como "ท t", el primer carácter tailandés "ท" usa 3 bytes, mientras que el segundo carácter inglés "t" usa solo 1 byte. Las personas que diseñaron la codificación de múltiples bytes se dieron cuenta de que el carácter en inglés no debería almacenarse en 3 bytes mientras que puede caber en 1 byte debido al desperdicio de espacio de almacenamiento.

UTF-16 almacena cada carácter, ya sea en inglés o en otro idioma, en una longitud fija de 2 bytes, por lo que no es multibyte, sino que se llama carácter ancho. Es muy adecuado para los idiomas chino / tailandés donde cada carácter se ajusta completamente en 2 bytes, pero la impresión a la salida de la consola utf-8 necesita una conversión de formato de caracteres anchos a multibyte mediante el uso de la función wcstombs ().

UTF-32 almacena cada carácter en una longitud fija de 4 bytes, pero nadie lo usa para almacenar caracteres debido a un desperdicio de espacio de almacenamiento.


Un carácter multibyte significará un personaje cuya codificación requiere más de 1 byte. Sin embargo, esto no implica que todos los caracteres que usen esa codificación particular tengan el mismo ancho (en términos de bytes). Por ejemplo: el carácter codificado UTF-8 y UTF-16 puede usar múltiples bytes a veces mientras que todos los caracteres codificados UTF-32 siempre usan 32 bits.

Referencias