Etiqueta

12 febrero 2014

De No-Unicode a Unicode (Parte 2 de 10)

La normalización de caracteres

Originalmente, Unicode se componía un conjunto de caracteres de 16 bits, y fue ampliado posteriormente hasta incluir el U+10FFFF y probablemente no será la última vez que se produzca una extensión.

Windows y Mac OS X aún representan cadenas de caracteres Unicode utilizando matrices de números enteros abreviados (16-bit), lo cual no representa un problema ya que el estándar UTF-16 permite que los códigos U+10000 y mayores puedan ser representados mediante pares de valores de 16 bits, lo cual puede dejar un par libre (sin uso), conocido como par suplente.

Internamente Omnis usa UTF-32 para representar los códigos, es decir, cada código ocupa 32 bits, por lo que el valor de cada uno de ellos puede estar entre 0 y U+10FFFF inclusive. Esto permite un procesamiento sencillo de las cadenas de caracteres, ya que cada código ocupa el mismo espacio de memoria.

Unicode permite un alto número de variantes entre los caracteres a representar. Por ejemplo, considere las posibles variantes de la letra E, con acento circunflejo, con un punto por debajo o su representación en vietnamita, este carácter de hecho consta de cinco posibles representaciones en formato Unicode:

U+0045          corresponde a la letra mayúscula latina E
U+0302          con acento circunflejo
U+0323          con un punto debajo
U+00CA         mayúscula con acento circunflejo
U+1EB8         mayúscula con punto debajo
U+1EC6         mayúscula con acento circunflejo y el punto por debajo

Un carácter representado por más de un código es conocido como carácter compuesto (composite), mientras que uno representado por un único código, es conocido como carácter pre-compuesto (pre-composed).

En lo que respecta a su "forma final", a cada una de éstas representaciones generalmente le corresponde una única grafía, lo cual conlleva algunas consecuencias interesantes en lo que respecta a su uso con Omnis y que iremos exponiendo en las sucesivas entregas de éste tutorial. Con el término "forma final" hacemos referencia al carácter que finalmente se desea obtener, en el ejemplo anterior, el carácter "forma final" sería: .

Con el término normalización hacemos referencia a la conversión de una cadena de caracteres a un formato estándar Unicode. Una vez normalizada, una cadena de caracteres Unicode tiene una única representación posible, permitiendo de ese modo su comparación con otras cadenas de caracteres. El estándar Unicode recomienda el uso de uno de los dos siguiente métodos de normalización:
  • Descomposición regulada, denominada NFD: Los caracteres pre-composed son sustituidos por caracteres composite equivalentes.
  • Descomposición regulada (NFD), seguida de pre-composed, denominada NFC: Después de llevarse a cabo el NFD, todos los caracteres composite resultantes son sustituidos por sus equivalentes pre-composed, si los hubiere.
Para realizar la normalización de cadenas de caracteres Omnis proporciona las siguientes dos funciones:
  • nfd(cadena): Ejecuta un NFD y devuelve la cadena normalizada. 
  • nfc(cadena): Ejecuta un NFC y devuelve la cadena normalizada.
Estas funciones no están disponibles para su uso en métodos del cliente web, es decir ejecutándose del lado del cliente.

No hay comentarios: