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 ha sido ampliamente adoptado, 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]
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:
La diferencia entre el punto de código actual y el punto de código anterior normalizado se codifica de la siguiente manera:
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.