Articulo de referencia

Compresión binaria ordenada para Unicode

La compresión binaria ordenada 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 ...

La compresión binaria ordenada 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 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 ]

Para comparar, SCSU se adoptó 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 de cada idioma . SCSU no se ha adoptado ampliamente, ya que no es adecuado para los tipos de medios MIME "texto". Por ejemplo, SCSU no se puede usar directamente en correos electrónicos y protocolos similares. SCSU requiere un diseño de codificador complejo para un buen rendimiento. Por lo general, zip , bzip2 y otros algoritmos estándar de la industria comprimen cantidades mayores de texto Unicode de manera más eficiente. [ 2 ]

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

Detalles

Todos los números de esta sección están en formato hexadecimal y todos los rangos son inclusivos.

Los puntos de código desde U+0000hasta U+0020se codifican en BOCU-1 como el valor de byte correspondiente. Todos los demás puntos de código (es decir, U+0021desde U+D7FFhasta 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. El mapeo de normalización es el siguiente:

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

Cada rango de bytes está ordenado lexicográficamente, excluyendo los siguientes trece valores de bytes: 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, va seguida inmediatamente de la secuencia de bytes FC 10 01, que codifica una diferencia de 1156C.

Cualquier entrada ASCII U+0000, U+007Fexcluyendo el espacio , U+0020reinicia el codificador a U+0040. Dado que los valores mencionados anteriormente cubren los puntos de código de fin de línea U+000Dy U+000Acomo es ( 0D 0A), el codificador se encuentra 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. En comparación, la corrupción de un solo byte en UTF-8 afecta como máximo a un punto de código, y 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, restablece 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 inicio de los textos codificados en 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 simplemente eliminar 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 desde U+0000hasta U+10FFFF. Excluyendo los trece puntos de código protegidos codificados como octetos simples, BOCU-1 puede usar25613=243{\displaystyle 256-13=243}Octetos en codificaciones multibyte. BOCU-1 requiere como máximo cuatro bytes, que consisten en un byte inicial y de uno a tres bytes finales. Los bytes finales codifican la diferencia restante en base 243 ( módulo 243), mientras que el byte inicial determina el número de bytes finales y una diferencia inicial. El byte de reinicio 0xFFno está protegido y puede aparecer como byte final.

Patentar

Antes del 16 de noviembre de 2022, el algoritmo general BOCU estaba cubierto por la patente estadounidense 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 quienes implementaran una "versión totalmente compatible de BOCU-1" debían contactar 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 estaba 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 "disponibles gratuitamente para cualquiera interesado en hacer que el formato de transformación forme parte de los estándares UCS", en lugar de exigir a los implementadores que solicitaran una licencia. [ 7 ]

No apto para HTML

Los estándares HTML del W3C y del WHATWG prohíben el uso de BOCU-1 (y SCSU, CESU-8, UTF-7, EBCDIC y UTF-32) en documentos HTML [ 8 ] [ 9 ] porque HTML no fue diseñado teniendo en cuenta codificaciones no compatibles con ASCII. En el pasado, se han demostrado vulnerabilidades de secuencias de comandos entre sitios debido al manejo deficiente de dichas codificaciones por parte de los navegadores. [ 10 ]

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 sobre la compresión Unicode" (PDF) . Recuperado el 13 de junio de 2008 .
  3. Registro de IANA para SCSU
  4. 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 binaria ordenada para Unicode" " . Consultado el 28-12-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 .
  8. "8.2.2.3. Codificaciones de caracteres" . Estándar HTML 5.1 . W3C.
  9. "12.2.3.3 Codificaciones de caracteres" . HTML Living Standard . WHATWG.
  10. " < meta> - HTML" . MDN Web Docs . Mozilla. Archivado del original el 3 de octubre de 2018.

Véase también