Compresión binaria ordenada para Unicode

Esquema de compresión Unicode compatible con MIME

La compresión ordenada binaria para Unicode ( BOCU ) es un esquema de compresión Unicode compatible con MIME . BOCU-1 combina la amplia aplicabilidad de UTF-8 con la compacidad del esquema de compresión estándar para Unicode (SCSU). Esta codificación Unicode está diseñada para ser útil para comprimir cadenas cortas y mantiene el orden de los puntos de código. BOCU-1 se especifica en una nota técnica de Unicode. [1]

A modo de comparación, se adoptó SCSU como esquema de compresión Unicode estándar con una relación byte/punto de código similar a las páginas de códigos específicas del idioma . SCSU no se ha adoptado ampliamente, ya que no es adecuado para los tipos de medios de "texto" MIME. Por ejemplo, SCSU no se puede utilizar directamente en correos electrónicos y protocolos similares. SCSU requiere un diseño de codificador complicado para un buen rendimiento. Por lo general, zip , bzip2 y otros algoritmos estándar de la industria compactan cantidades mayores de texto Unicode de manera más eficiente. [2]

Tanto SCSU [3] como BOCU-1 [4] son ​​conjuntos de caracteres registrados por la IANA .

Detalles

Todos los números en esta sección son hexadecimales y todos los rangos son inclusivos.

Los puntos de código de U+0000a U+0020se codifican en BOCU-1 como el valor de byte correspondiente. Todos los demás puntos de código (es decir, U+0021hasta U+D7FFy U+E000hasta U+10FFFF) se codifican como una diferencia entre el punto de código y una versión normalizada del punto de código codificado más recientemente que no era un espacio ASCII ( U+0020). El estado inicial es U+0040. La asignación de normalización es la siguiente:

Rango de códigosPunto de código normalizadoNotas
U+3040aU+309FU+3070Hiragana
U+4E00aU+9FA5U+7711Unihan
U+AC00aU+D7A3U+C1D1Hangul
U+0020El estado del codificador se mantiene tal cualEspacio
U+hhhh00a (excluyendo los rangos anteriores)U+hhhh7F
U+hhhh40mediados
de 128
U+hhhh80a (excluyendo los rangos anteriores)U+hhhhFF
U+hhhhC0mediados
de 128

La diferencia entre el punto de código actual y el punto de código anterior normalizado se codifica de la siguiente manera:

Rango de diferenciaRango de secuencia de bytes
(ver abajo)
-10FF9Fa-2DD0D21 F0 58 D9a21 FF FF FF
-2DD0Ca-291222 01 01a24 FF FF
-2911a-4125 01a4F FF
-40a3F50aCF
40a2910D0 01aFA FF
2911a2DD0BFB 01 01aFD FF FF
2DD0Ca10FFBFFE 01 01 01aFE 19 B4 54

Cada rango de bytes está ordenado lexicográficamente con los siguientes trece valores de bytes excluidos: 00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20. Por ejemplo, la secuencia de bytes FC 06 FF, que codifica una diferencia de 1156B, es seguida inmediatamente por la secuencia de bytes FC 10 01, que codifica una diferencia de 1156C.

Cualquier entrada ASCII U+0000que U+007Fexcluya el espacio U+0020restablece el codificador a U+0040. Debido a que los valores mencionados anteriormente cubren los puntos de código de fin de línea U+000Dy U+000A tal como están ( 0D 0A), el codificador está en un estado conocido al comienzo de cada línea. Por lo tanto, la corrupción de un solo byte afecta como máximo a una línea. A modo de comparación, la corrupción de un solo byte en UTF-8 afecta como máximo a un punto de código; para SCSU , puede afectar a todo el documento.

BOCU-1 ofrece una robustez similar también para textos de entrada sin los valores mencionados anteriormente con el código de reinicio especial 0xFF. Cuando un decodificador encuentra este octeto, reinicia su estado como U+0040para un final de línea. El uso de 0xFFbytes de reinicio no se recomienda en la especificación BOCU-1, porque entra en conflicto con otros objetivos de diseño de BOCU-1, en particular el orden binario .

El uso opcional de una firma U+FEFFal comienzo de los textos codificados BOCU-1, es decir, la secuencia de bytes BOCU-1 FB EE 28, cambia el estado inicial U+0040a U+FEC0. En otras palabras, la firma no se puede eliminar simplemente como en la mayoría de los demás esquemas de codificación Unicode. Agregar un byte de reinicio después de la firma ( FB EE 28 FF) podría evitar este efecto, pero la especificación BOCU-1 no recomienda esta práctica.

En teoría, UTF-1 y UTF-8 podrían codificar el conjunto UCS-4 original con 31 bits hasta 7FFFFFFF. BOCU-1 y UTF-16 pueden codificar el conjunto Unicode moderno de U+0000a U+10FFFF. Excluyendo los trece puntos de código protegidos codificados como octetos individuales, BOCU-1 puede usar octetos en codificaciones de múltiples bytes. BOCU-1 necesita como máximo cuatro bytes que consisten en un byte inicial y de uno a tres bytes finales. Los bytes finales codifican una diferencia restante de " módulo 243" (base 243), el byte inicial determina el número de bytes finales y una diferencia inicial. Tenga en cuenta que el byte de reinicio no está protegido y puede aparecer como byte final. 256 13 = 243 {\estilo de visualización 256-13=243} 0xFF

Patentar

Antes del 16 de noviembre de 2022, el algoritmo general BOCU estaba cubierto por la patente de los Estados Unidos n.° 6 737 994, que también menciona la implementación específica de BOCU-1. [5] Esta patente ya ha expirado.

IBM , que empleaba a ambos inventores de BOCU-1 en el momento de su creación, declaró en la Nota técnica de Unicode que los implementadores de una "versión totalmente compatible de BOCU-1" tenían que ponerse en contacto con IBM para solicitar una licencia libre de regalías. [6] BOCU-1 es el único esquema de compresión Unicode descrito en el sitio web de Unicode que se sabe que ha estado sujeto a restricciones de propiedad intelectual .

Por el contrario, IBM también solicitó una patente para UTF-EBCDIC , pero en ese caso optó por hacer que la documentación y el esquema de codificación estuvieran "libremente disponibles para cualquier persona interesada en hacer que el formato de transformación sea parte de los estándares UCS", en lugar de exigir a los implementadores que solicitaran una licencia. [7]

Referencias

  1. ^ Markus Scherer, Mark Davis (4 de febrero de 2006). «UTN#6: BOCU-1» . Consultado el 18 de mayo de 2008 .
  2. ^ Ewell, Doug (30 de enero de 2004). "UTN #14: Un estudio de la compresión Unicode" (PDF) . Consultado el 13 de junio de 2008 .
  3. ^ Registro de registro de IANA para SCSU
  4. ^ Registro de registro de IANA para BOCU-1
  5. ^ Davis ; et al. (18 de mayo de 2004). "Patente de Estados Unidos n.º 6.737.994, "Compresión ordenada en binario para Unicode"" . Consultado el 28 de diciembre de 2022 .
  6. ^ Markus Scherer, Mark Davis (4 de febrero de 2006). «UTN#6: BOCU-1» . Consultado el 5 de febrero de 2014 .
  7. ^ VS Umamaheswaran (16 de abril de 2002). "UTR nº 16: UTF-EBCDIC" . Consultado el 16 de noviembre de 2008 .

Véase también

Obtenido de "https://es.wikipedia.org/w/index.php?title=Compresión_ordenada_binaria_para_Unicode&oldid=1217163560"