UTF-32

UTF-32 ( Eng.  Unicode Transformation Format ) o UCS-4 (universal character set, eng.  Universal Character Set ) en informática  es una de las formas de codificar caracteres Unicode , utilizando exactamente 32 bits para codificar cualquier carácter. Las codificaciones restantes, UTF-8 y UTF-16, usan una cantidad variable de bytes para representar caracteres. Un carácter UTF-32 es una representación directa de su posición de código ( Punto de código).

La principal ventaja de UTF-32 sobre las codificaciones de longitud variable es que los caracteres Unicode se pueden indexar directamente. Obtener la posición del código n es una operación que lleva el mismo tiempo. Por el contrario, los códigos de longitud variable requieren un acceso secuencial a la posición del código n. Esto facilita la sustitución de caracteres en cadenas UTF-32 mediante el uso de un número entero como índice, como suele hacerse con las cadenas ASCII .

La principal desventaja de UTF-32 es su uso ineficiente del espacio, ya que se utilizan cuatro bytes para almacenar un carácter. Los caracteres que se encuentran fuera del plano cero (base) del espacio del código rara vez se usan en la mayoría de los textos. Por lo tanto, no se justifica duplicar, en comparación con UTF-16, el espacio que ocupan las cadenas en UTF-32.

Si bien es conveniente usar un número fijo de bytes por carácter, no es tan bueno como parece. El truncamiento de cadenas es más fácil de implementar que UTF-8 y UTF-16. Pero esto no hace que sea más rápido encontrar un desplazamiento específico en una cadena, ya que el desplazamiento también se puede calcular para codificaciones de tamaño fijo. Esto no facilita el cálculo del ancho de línea mostrado, excepto en un número limitado de casos, ya que incluso se puede obtener un carácter de "ancho fijo" combinando un carácter regular con un modificador que no tiene ancho. Por ejemplo, la letra "y" se puede derivar de la letra "i" y el diacrítico " gancho sobre letra " . La combinación de dichos caracteres significa que los editores de texto no pueden tratar el código de 32 bits como una unidad de edición. Los editores que se limitan a trabajar con lenguajes de caracteres precompuestos y de izquierda a derecha pueden usar caracteres de tamaño fijo .  Pero es poco probable que dichos editores admitan caracteres fuera del plano cero (base) del espacio de código y es poco probable que funcionen igualmente bien con caracteres UTF-16.

Historia

El estándar ISO 10646 define un formato de codificación de 31 bits denominado UCS-4, en el que cada carácter codificado se representa mediante un valor de código de 32 bits en el espacio de código de números del 0 al 7FFFFFFF.

Dado que solo se utilizan 17 planos, los códigos de todos los caracteres tienen valores de 0 a 0x10FFFF. UTF-32 es un subconjunto de UCS-4 que solo usa este rango. Dado que el documento JTC1/SC2/WG2 establece que todas las futuras asignaciones de caracteres se limitarán al plano cero (base) del espacio del código o los primeros 14 planos adicionales, UTF-32 podrá representar todos los caracteres Unicode. En consecuencia, UCS-4 y UTF-32 son idénticos actualmente, excepto que el estándar UTF-32 tiene semántica Unicode adicional.

Uso

UTF-32 no se usa principalmente en cadenas de caracteres, sino en API internas donde los datos son un solo punto de código o glifo . Por ejemplo, al dibujar texto, el paso final genera una lista de estructuras, cada una de las cuales incluye posiciones x e y, atributos y un único carácter UTF-32 que identifica el glifo que se va a dibujar. A menudo, los 11 bits "no utilizados" de cada carácter de 32 bits almacenan información superflua.

UTF-32 se usa para almacenar cadenas en Unix cuando el tipo wchar_t se define como de 32 bits. Es posible que los programas de Python hasta 3.2 inclusive se hayan compilado para usar UTF-32 en lugar de UTF-16. A partir de la versión 3.3, se eliminó la compatibilidad con UTF-16 y las cadenas se almacenan en UTF-32, pero los ceros iniciales se optimizan si no se usan. En Windows , donde el tipo wchar_t es de 16 bits, casi nunca se utilizan cadenas UTF-32.

No usar UTF-32 en HTML5

El estándar HTML5 establece que "los autores no deben usar UTF-32 porque los algoritmos de codificación descritos en esta especificación no lo distinguen de UTF-16".

Enlaces