Un recorrido rápido por Unicode

Unicode es un sistema de codificación de caracteres utilizado por los equipos informáticos para el almacenamiento y el intercambio de datos en formato de texto. Asigna un número único (un punto del código) a cada carácter de los principales sistemas de escritura del mundo. También incluye símbolos técnicos y de puntuación, y otros muchos caracteres utilizados en la escritura de textos.

Unicode, además de ser un mapa de caracteres, incluye algoritmos de ordenación y codificación de textos bidireccionales (por ejemplo en árabe), y especificaciones de normalización de formularios de texto.

En este tema se proporciona una visión global de Unicode. Para obtener una explicación más completa y una lista de los idiomas que se pueden codificar con Unicode, consulte el sitio web de Unicode Consortium.

Puntos de código

Los caracteres son unidades de información que corresponden aproximadamente a una unidad de texto en la forma escrita de un lenguaje natural. Unicode define cómo se interpretan los caracteres, no cómo se representan.

Un glifo, que es la representación visual de un carácter, es la marca realizada en la pantalla del equipo o la página impresa. En algunos sistemas de escritura, un carácter puede corresponder a varios glifos o varios caracteres a un glifo. Por ejemplo, "ll" en español es un glifo pero dos caracteres: "l" y "l".

En Unicode, un carácter se corresponde con un punto de código. Los puntos de código son los números asignados por Unicode Consortium a cada carácter en cada sistema de escritura. Los puntos de código se representan como U+ seguido de cuatro cifras o letras. A continuación se ofrecen ejemplos de puntos de código para cuatro caracteres diferentes: la l minúscula, la u minúscula con diéresis, la beta y la e minúscula con acento agudo.

l = U+006C

ü = U+00FC

β = U+0392

é = U+00E9

Unicode contiene 1.114.112 puntos del código; en la actualidad más de 96.000 de ellos tienen asignados caracteres.

Niveles

El espacio de códigos de Unicode para caracteres está dividido en 17 niveles, cada uno de los cuales posee 65.536 puntos de código.

El primer nivel (el nivel 0) es el Nivel Multilingüe Básico (BMP, por sus siglas en inglés). La mayoría de caracteres de uso habitual se encuentran en el BMP y, hasta la fecha, ahí es donde la mayoría se han asignado. BMP contiene los puntos de código de casi todos caracteres de los idiomas modernos y de muchos caracteres especiales. El BMP contiene aproximadamente 6.300 puntos del código no usados, que se utilizarán para agregar más caracteres en el futuro.

El siguiente nivel (el nivel 1) es el Nivel Multilingüe Suplementario (SMP). El SMP se utiliza para los textos históricos y los símbolos musicales y matemáticos.

Codificación de caracteres

La codificación de caracteres define cada carácter, su punto de código y su representación en bits. Una cadena de caracteres no se puede interpretar correctamente si se desconoce la codificación utilizada.

Existen numerosos esquemas de codificación, pero no es fácil realizar la conversión entre ellos, y casi todos toman en consideración únicamente los caracteres de un reducidísimo grupo de idiomas diferentes. Por ejemplo, si el equipo estuviera configurado para utilizar OEM-Latin II de forma predeterminada y visitara un sitio Web que utilizara IBM EBCDIC-Cyrillic, los caracteres cirílicos que no estuvieran presentes en el esquema de codificación Latin II no se mostraría correctamente y serían reemplazados por otros caracteres, por ejemplo un signo de interrogación o un cuadrado.

Dado que Unicode contiene los puntos de código de la mayoría de los caracteres de todos los idiomas modernos, el uso de un codificador de carácter Unicode permitirá al equipo interpretar prácticamente todos los caracteres conocidos.

Hay tres esquemas principales de codificación Unicode en uso: UTF-8, UTF-16 y UTF-32. UTF significa Unicode Transformation Format (“formato de transformación de Unicode”). Los números que siguen a UTF indican el tamaño, en bits, de las unidades utilizadas para la codificación.

  • UTF-8 utiliza codificaciones de caracteres de ancho variable de 8 bits. UTF-8 utiliza entre 1 y 6 bytes para codificar un carácter; puede utilizar un número de bytes inferior, igual o superior al que utiliza UTF-16 para codificar el mismo carácter. En UTF-8, cada punto de código de 0 a 127 (U+0000 a U+0127) se almacena en un solo byte. Solo los puntos de código a partir de 128 (U+0128) inclusive se almacenan utilizando entre 2 y 6 bytes.
  • UTF-16 utiliza una sola unidad de código de ancho fijo de 16 bits. Es relativamente compacto y todos los caracteres de uso habitual caben en una sola unidad de código de 16 bits. Otros caracteres son accesibles utilizando pares de unidades de código de 16 bits.
  • UTF-32 requiere 4 bytes para codificar cualquier carácter. En la mayoría de los casos, un documento codificado en UTF-32 tendrá un tamaño casi el doble del que tendría codificado en UTF-16. Cada carácter se codifica en una sola unidad de código de 32 bits y ancho fijo. UTF-32 se utiliza cuando no hay problemas de memoria y se desea poder utilizar una sola unidad de código para cada carácter.

Las tres formas de codificación codifican los mismos caracteres comunes y es posible realizar la conversión de una a la otra sin pérdida de datos.

Otras codificaciones de caracteres Unicode son UTF-7 y UTF-EBCDIC. Existe también la codificación GB18030, que es un equivalente chino de UTF-8 y admite los caracteres del chino simplificado y del chino tradicional.