Codificación de caracteres Unicode

El estándar de codificación de caracteres Unicode es un esquema de codificación de caracteres de longitud fija que incluye caracteres de casi todos los idiomas vivos del mundo.

Puede encontrar información sobre Unicode en The Unicode Standardy en el sitio web de Unicode Consortium en www.unicode.org.

Unicode utiliza dos formatos de codificación: 8 bits y 16 bits, basándose en el tipo de datos de los datos que se están codificando. El formato de codificación predeterminado es de 16 bits, donde cada carácter tiene 16 bits (2 bytes) de ancho. El formato de codificación de dieciséis bits se suele mostrar como U + hhhh, donde hhhh es el punto de código hexadecimal del carácter. Este formato de codificación produce más de 65 000 elementos de código, lo que es suficiente para codificar la mayoría de los caracteres de los principales idiomas del mundo. El estándar Unicode también proporciona un mecanismo de extensión que permite la codificación de hasta 1.000.000 de caracteres adicionales. El mecanismo de extensión utiliza un par de caracteres sustitutos altos y bajos para codificar un carácter ampliado o suplementario. El primer carácter sustituto (o superior) tiene un valor de código entre U+D800 y U + DBFF. El segundo carácter sustituto (o inferior) tiene un valor de código entre U+DC00 y U + DFFF.

UCS-2

La norma ISO (International Organization for Standardization) y la norma IEC (International Electrotechnical Commission) 10646 (ISO/IEC 10646) especifican el juego de caracteres universal de varios octetos (UCS). Este juego de caracteres tiene una versión de 16 bits (dos bytes) (UCS-2) y una versión de 32 bits (cuatro bytes) (UCS-4). UCS-2 es idéntico al formato Unicode de 16 bits sin sustitutos. UCS-2 puede codificar todos los caracteres (de 16 bits) definidos en el repertorio de Unicode versión 3.0 . Se necesitan dos caracteres UCS-2 , un alto seguido de un sustituto bajo, para codificar cada uno de los nuevos caracteres suplementarios, a partir de la versión Unicode 3.1. Estos caracteres suplementarios se definen fuera del plano multilingüe básico de 16 bits original (BMP o Plano 0).

UTF-16

ISO/IEC 10646 también define una técnica de extensión para codificar algunos caracteres UCS-4 utilizando dos caracteres UCS-2 . Esta extensión, denominada UTF-16, es idéntica al formato de codificación Unicode de 16 bits con sustitutos. En resumen, el repertorio de caracteres UTF-16 consta de todos los caracteres UCS-2 más los 1.000.000 de caracteres adicionales a los que se puede acceder a través de los pares suplentes.

Al serializar caracteres Unicode de 16 bits en bytes, el orden en el que aparecen los bytes depende del procesador que se esté utilizando. Algunos procesadores colocan el byte más significativo en la posición inicial (conocido como orden big-endian), mientras que otros colocan el byte menos significativo primero (conocido como orden little-endian). El orden de bytes predeterminado para Unicode es big-endian.

UTF-8

Los caracteres Unicode de dieciséis bits plantean un problema importante para las aplicaciones basadas en ASCII orientadas a bytes y los sistemas de archivos. Por ejemplo, las aplicaciones que no tienen en cuenta Unicode pueden interpretar erróneamente los 8 bits cero iniciales del carácter 'A' en mayúsculas (U+0041) como el carácter ASCII NULL de un solo byte.

UTF-8 (UCS Transformation Format 8) es una transformación algorítmica que transforma caracteres Unicode de longitud fija en series de bytes seguras ASCII de longitud variable. En UTF-8, los caracteres ASCII y de control se representan mediante sus códigos de un solo byte habituales, y otros caracteres pasan a tener una longitud de dos o más bytes. UTF-8 puede codificar caracteres no suplementarios y suplementarios.

Los caracteres UTF-8 pueden tener una longitud máxima de 4 bytes. Los caracteres no suplementarios tienen una longitud de hasta 3 bytes y los caracteres suplementarios tienen una longitud de 4 bytes.

El número de bytes para cada carácter UTF-16 en formato UTF-8 se puede determinar a partir de la Tabla 1.

Tabla 1. UTF-8 Distribución de bits
Valor de código

(binario)

UTF-16

(binario)

Primer byte

(binario)

Segundo byte

(binario)

Tercer byte

(binario)

Byte cuarto

(binario)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

aaxxxxxx

00000yyy

aaxxxxxx

110yyyyy 10xxxxxx    
zzzzaaaa

aaxxxxxx

zzzzaaaa

aaxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuu

zzzzaaaa

aaxxxxxx

110110ww

Wwzzzzyy

110111yy

aaxxxxxx

11110uuu

(donde uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

En cada uno de los valores de código listados en la tabla anterior, la serie de u's, w's, x's, y's y z's es la representación de bits del carácter. Por ejemplo, U+0080 se transforma en 11000010 10000000 en formato binario y el par de caracteres suplentes U+D800 U+DC00 pasa a ser 11110000 10010000 10000000 10000000 en formato binario.