Formatos UTF

Cada elemento de código Unicode puede expresarse en varios formatos diferentes. Estos formatos se denominan formatos de transformación Unicode (UTF). Por ejemplo, la letra M es el elemento de código Unicode U+004D. En UTF-8, este elemento de código se representa como X'4D'. En UTF-16, este punto de código se puede representar como X'004D'. 1

Un formato UTF correlaciona cada elemento de código Unicode con una secuencia de unidades de código exclusiva. Una unidad de código es la combinación de bits mínima que puede representar un carácter. Cada formato UTF utiliza un tamaño de unidad de código diferente. Por ejemplo, UTF-8 se basa en unidades de código de 8 bits. Por tanto, cada carácter puede tener 8 bits (1 byte), 16 bits (2 bytes), 24 bits (3 bytes) o 32 bits (4 bytes). De forma similar, el formato UTF-16 se basa en unidades de código de 16 bits. Por tanto, cada carácter puede tener 16 bits (2 bytes) o 32 bits (4 bytes).

Todos los formatos UTF incluyen el repertorio de caracteres (o juego de caracteres) Unicode completo. Cada formato UTF puede representar cualquier carácter Unicode que necesite representar.

Los formatos UTF siguientes los ha definido Unicode Consortium:

UTF-8
UTF-8 se basa en unidades de código de 8 bits. Cada carácter se codifica con 1 a 4 bytes.

Los primeros 128 elementos de código Unicode se codifican como 1 byte en UTF-8. Estos elementos de código son los mismos que los del CCSID ASCII 367. Los demás caracteres se codifican con más de 1 byte en UTF-8.

En IBM®, UTF-8 también se conoce como Unicode CCSID 1208.

Db2 utiliza UTF-8 para codificar datos de las siguientes maneras:

  • Db2 utiliza UTF-8 para codificar datos en columnas CHAR, VARCHAR y CLOB en tablas Unicode.
  • Db2 analiza las instrucciones SQL y precompila el código fuente en UTF-8.
  • Las tablas del catálogo Db2 que tienen el esquema de codificación Unicode están codificadas en UTF-8.
UTF-16
El formato UTF-16 se basa en unidades de código de 16 bits. Cada carácter se codifica con al menos 2 bytes. Algunos caracteres que se codifican con una unidad de código de 1 byte en UTF-8 se codifican con una unidad de códigos de 2 bytes en UTF-16.

Los caracteres de sustitución utilizan 4 bytes y, por tanto, requieren almacenamiento adicional. Estos caracteres también pueden almacenarse en UTF-8 o en UTF-32, pero puesto que siempre necesitan 4 bytes de almacenamiento, ninguno de estos formatos permite ahorrar espacio.

En IBM, UTF-16 también se conoce como Unicode CCSID 1200.

Db2 utiliza UTF-16 para codificar datos en columnas GRAPHIC, VARGRAPHIC y DBCLOB en tablas Unicode.

UTF-32
UTF-32 se basa en unidades de código de 32 bits. Cada carácter se codifica con al menos 4 bytes. Db2 no almacena datos en UTF-32.

La tabla siguiente muestra codificaciones UTF de ejemplo para varios caracteres.

Tabla 1. Codificaciones UTF de ejemplo
Carácter Elemento de código Unicode ASCII UTF-8 UTF-16 (formato Big Endian)1 UTF-32 (formato Big Endian)
A U+0041 X'41' X'41' X'0041' X'00000041'
a U+0061 X'61' X'61' X'0061' X'00000061'
9 U+0039 X'39' X'39' X'0039' X'00000039'
Å U+00C5 X'C5' C385 X'00C5' X'000000C5'
U+9860 X'CDDB' (CCSID 939) X'E9A1A0' X'9860' X'00009860'
Comenzar descripción de figura. Caracteres Unicode 200D0. Finalizar descripción de figura. U + 200D0 No existe X'F0A08390' X'D840DCD0' X'000200D0'
Notas:
  1. z/OS® utiliza únicamente el formato Big Endian. El formato little endian se utiliza en otros sistemas operativos.
  2. X'C5' se convierte en doble byte en UTF-8.

Observe que, en algunos caracteres, la codificación UTF es bastante predecible. Por ejemplo, el carácter A, que es el punto de código de Unicode U+0041, se codifica como X'41' en ASCII y UTF-8, y como X'0041' en UTF-16 y como X'00000041' en UTF-32. Sin embargo, las codificaciones UTF para un carácter como Å o Comenzar descripción de figura. Caracteres Unicode 200D0. Finalizar descripción de figura. no siguen el mismo patrón.

El proceso de convertir un valor de su elemento de código Unicode a su valor hexadecimal UTF se denomina codificación. Por ejemplo, el elemento de código Unicode U+0041 se codifica en UTF-8 como X'41'. El proceso inverso, que es convertir un valor hexadecimal UTF en su elemento de código Unicode, se denomina descodificación. Por ejemplo, supongamos que ve el valor hexadecimal X'00C5' en la salida de rastreo y sabe que los datos están en UTF-16. Puede descodificar el valor para buscar el que corresponde al elemento de código Unicode U+00C5. A continuación, puede buscar este punto de código Unicode en las tablas de códigos de caracteres Unicode del sitio web del Consorcio Unicode y comprobar que corresponde al carácter Å.

Puede encontrar los pasos para saber cómo codificar y descodificar manualmente datos Unicode en el sitio web de Unicode Consortium. Como alternativa, puede utilizar una herramienta de conversión para que realice la conversión de forma automática.

1 X'004D' es la representación big endian de UTF-16. La representación little endian en UTF-16 es X'4D00'. Para obtener más información sobre el endianness, consulte Endianness.