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 mayores cantidades 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 son hexadecimales y todos los rangos son inclusivos.
Los puntos de código de U+0000
a U+0020
se codifican en BOCU-1 como el valor de byte correspondiente. Todos los otros puntos de código (es decir, U+0021
a través de U+D7FF
y U+E000
a través de U+10FFFF
) se codifican como una diferencia entre el punto de código y una versión normalizada del punto de código más recientemente codificada que no era un espacio ASCII ( U+0020
). El estado inicial es U+0040
. El mapeo de normalización es el siguiente:
Rango de código | Punto de código normalizado | Notas |
---|---|---|
U+3040 a U+309F | U+3070 | Hiragana |
U+4E00 a U+9FA5 | U+7711 | Unihan |
U+AC00 a U+D7A3 | U+C1D1 | Hangul |
U+0020 | el estado del codificador se mantiene como está | Espacio |
U+hhhh00 a (excluyendo los rangos anteriores)U+hhhh7F | U+hhhh40 | mediados de 128 |
U+hhhh80 a (excluyendo los rangos anteriores)U+hhhhFF | U+hhhhC0 | mediados 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 diferencia | Rango de secuencia de bytes (ver más abajo) |
---|---|
-10FF9F a -2DD0D | 21 F0 58 D9 a 21 FF FF FF |
-2DD0C a -2912 | 22 01 01 a 24 FF FF |
-2911 a -41 | 25 01 a 4F FF |
-40 a 3F | 50 a CF |
40 a 2910 | D0 01 a FA FF |
2911 a 2DD0B | FB 01 01 a FD FF FF |
2DD0C a 10FFBF | FE 01 01 01 a FE 19 B4 54 |
Cada intervalo de bytes se lexicográfico ordenó con los valores de byte siguiente trece 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+0000
para U+007F
excluir el espacio U+0020
restablece el codificador a U+0040
. Debido a que los valores mencionados anteriormente cubren puntos de código de final de línea U+000D
y U+000A
tal como está ( 0D 0A
), el codificador se encuentra en un estado conocido al comienzo de cada línea. Por 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, restablece su estado al U+0040
final de una línea. El uso de 0xFF
bytes 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+FEFF
al comienzo de los textos codificados BOCU-1, es decir, la secuencia de bytes BOCU-1 FB EE 28
, cambia el estado inicial U+0040
a U+FEC0
. En otras palabras, la firma no se puede eliminar simplemente como en la mayoría de los otros 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+0000
a U+10FFFF
. Excluyendo los trece puntos de código protegidos codificados como octetos individuales que BOCU-1 puede utilizaroctetos en codificaciones de varios bytes. BOCU-1 necesita como máximo cuatro bytes que constan de un byte inicial y de uno a tres bytes de seguimiento. Los bytes de seguimiento codifican una diferencia restante de " módulo 243" (base 243), el byte inicial determina el número de bytes de seguimiento y una diferencia inicial. Tenga en cuenta que el byte de reinicio 0xFF
no está protegido y puede aparecer como byte de seguimiento.
Patentar
El algoritmo BOCU general está cubierto por la patente de Estados Unidos nº 6.737.994, que también menciona la implementación específica de BOCU-1. [5] IBM , que empleó a los dos inventores de BOCU-1 en el momento de su creación, afirma en la Nota técnica de Unicode que los implementadores de una "versión totalmente compatible de BOCU-1" deben comunicarse con IBM para solicitar una licencia libre de regalías. licencia. [6] BOCU-1 es el único esquema de compresión Unicode descrito en el sitio web Unicode que se sabe que tiene restricciones de propiedad intelectual .
Por el contrario, IBM también solicitó una patente sobre UTF-EBCDIC , pero en ese caso optó por hacer que la documentación y el esquema de codificación "estén disponibles gratuitamente 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 para solicitar una licencia. [7]
Referencias
- ↑ Markus Scherer, Mark Davis (4 de febrero de 2006). "UTN # 6: BOCU-1" . Consultado el 18 de mayo de 2008 .
- ^ Ewell, Doug (30 de enero de 2004). "UTN # 14: una encuesta de compresión Unicode" (PDF) . Consultado el 13 de junio de 2008 .
- ^ Registro de registro de IANA para SCSU
- ^ Registro de registro IANA para BOCU-1
- ^ 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 16 de noviembre de 2008 .
- ^ Markus Scherer, Mark Davis (4 de febrero de 2006). "UTN # 6: BOCU-1" . Consultado el 5 de febrero de 2014 .
- ^ VS Umamaheswaran (16 de abril de 2002). "UTR # 16: UTF-EBCDIC" . Consultado el 16 de noviembre de 2008 .
Ver también
- UTF-1 contiene una comparación de los diseños UTF-1, UTF-8 y BOCU-1
- Componentes internacionales para Unicode Una biblioteca que puede convertir entre BOCU-1 y otras codificaciones Unicode