Compresión ordenada binaria para Unicode


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+0000a U+0020se codifican en BOCU-1 como el valor de byte correspondiente. Todos los otros puntos de código (es decir, U+0021a través de U+D7FFy U+E000a 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+0000para U+007Fexcluir el espacio U+0020restablece el codificador a U+0040. Debido a que los valores mencionados anteriormente cubren puntos de código de final de línea U+000Dy 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.