El esquema de compresión estándar para Unicode (SCSU) [ 1 ] es un estándar técnico de Unicode para reducir la cantidad de bytes necesarios para representar texto Unicode, especialmente si ese texto usa principalmente caracteres de uno o un pequeño número de bloques de caracteres por idioma. Lo hace mapeando dinámicamente valores en el rango 128-255 a desplazamientos dentro de bloques particulares de 128 caracteres. Las condiciones iniciales del codificador significan que las cadenas existentes en ASCII e ISO-8859-1 que no contienen códigos de control C0 distintos de NULL TAB CR y LF pueden tratarse como cadenas SCSU. Dado que la mayoría de los alfabetos residen en bloques de puntos de código Unicode contiguos, los textos que usan alfabetos pequeños y puntuación ASCII o puntuación que cabe dentro de la ventana para el alfabeto principal pueden codificarse a un byte por carácter (más la sobrecarga de configuración, que para los idiomas comunes suele ser solo 1 byte), la mayoría de la otra puntuación puede codificarse a 2 bytes por símbolo a través de desplazamientos sin bloqueo. SCSU también puede cambiar internamente a UTF-16 para manejar idiomas no alfabéticos.
Historia y uso
Reuters desarrolló originalmente SCSU, luego bajo el nombre RCSU para Reuters Compression Scheme for Unicode. [ 2 ] [ 3 ] [ 4 ] [ 5 ]
Al principio, el Consorcio Unicode lo consideró una codificación de caracteres, [ 6 ] pero en 1999 cambió de opinión: aunque seguía considerándose una sintaxis de codificación de transferencia, durante un tiempo dejó de considerarse una codificación de caracteres porque diferentes compresores podían generar resultados distintos para el mismo texto. [ 7 ] Sin embargo, en 2004 se revirtió esta decisión y ahora SCSU se considera un esquema de codificación de caracteres de compresión , en contraposición a un esquema de codificación de caracteres simple o compuesto. [ 8 ] [ 9 ]
Roman Czyborra (de GNU Unifont ) escribió un descompresor. [ 10 ] El descompresor aportado por IBM se encuentra en International Components for Unicode , junto con un compresor escrito en Java. [ 11 ] Hay códecs de referencia más simples disponibles como adjuntos a TR6.
Symbian OS , un sistema operativo para teléfonos móviles y otros dispositivos móviles, utiliza SCSU para serializar cadenas de caracteres.
SQL Server 2008 R2 utiliza SCSU para comprimir valores Unicode (es decir, cadenas en codificación UCS-2 ) almacenados en columnas nchar(n) y nvarchar(n) , logrando ahorros de espacio de entre el 15 % y el 50 % (mientras que UTF-8 solo tiene esta reducción del 50 % para el subconjunto ASCII de Unicode), dependiendo del idioma de los datos. [ 12 ]
El plan
Las siguientes secciones describen brevemente la anatomía de un flujo SCSU comprimido. Para una descripción completa (similar a la de un descompresor), consulte el documento UTS n.° 6.
Modos de codificación
SCSU se inicia en el modo de un solo byte, que utiliza la codificación comprimida de Windows. Existen comandos para cambiar al modo "Unicode" UTF-16BE y para volver al modo de un solo byte desde ese modo.
Codificación de ventana
El núcleo de SCSU reside en las ventanas para las que se definen los significados de los bytes 0x80-0xff. Hay ocho ventanas estáticas para escrituras y puntuación más sencillas, y 6 tipos de ventanas dinámicas (además de ventanas de "medio bloque Unicode" y ventanas personalizadas para los planos suplementarios) para escrituras que utilizan más caracteres.
Las ventanas, tanto simples como dinámicas, se seleccionan mediante caracteres especiales. Para los caracteres individuales que no caben en el bloque actual, se proporcionan caracteres de comando para citarlos.
Comparación con esquemas de compresión de texto plano de propósito general
Debido a que el texto UTF-16 o UTF-8 puede ocupar más espacio que su equivalente en codificaciones pre-Unicode, se podría utilizar compresión como SCSU para mitigar este problema. [ 13 ] En comparación con los compresores de propósito general, no es necesariamente ventajoso usar SCSU. [ 5 ] Además, si bien se puede usar como codificación de texto, debido a la naturaleza con estado del algoritmo, pueden surgir dificultades al usarlo como representación interna de texto, ya que las operaciones básicas de texto se vuelven no triviales.
Considerado únicamente como un algoritmo de compresión, SCSU es inferior a la mayoría de los algoritmos de propósito general más utilizados para textos de más de unos pocos kilobytes.
SCSU tiene la ventaja de poder comprimir eficazmente textos de tan solo unos pocos caracteres, mientras que la mayoría de los compresores de gran tamaño necesitan cientos de bytes de datos para compensar su propio coste computacional. En Symbian OS , SCSU se utiliza incluso para operaciones del portapapeles, como cortar, copiar y pegar pequeñas cadenas de texto.
No apto para HTML
Los estándares HTML del W3C y del WHATWG prohíben el uso de SCSU (y BOCU-1, CESU-8, UTF-7, EBCDIC y UTF-32) en documentos HTML [ 14 ] [ 15 ] 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. [ 16 ]
Véase también
- Compresión binaria ordenada para Unicode (BOCU-1)
- Componentes internacionales para Unicode: Una biblioteca que permite la conversión entre SCSU y otras codificaciones Unicode.
Referencias
- ↑ "UTS #6: Esquema de compresión para Unicode" . 6 de mayo de 2005. Consultado el 13 de junio de 2008.
SCSU define una codificación compacta, que a veces resulta útil. Sin embargo, el texto Unicode se almacena y transmite con mucha más frecuencia en UTF-8 , que es menos compacto (excepto para ASCII ), mucho más simple y no presenta problemas de seguridad. Para textos más largos, la compresión de propósito general es eficaz y común.
- ↑ "Novena Conferencia Internacional Unicode - Viernes - Sesión B" .
- ↑ "Décima Conferencia Internacional Unicode - Programa de la Conferencia" .
- ↑ "Esquema de compresión para Unicode" .
- 1 2 "Un estudio sobre la compresión Unicode" (PDF) .
- ↑ "UTR#17: Modelo de codificación de caracteres" .
- ↑ https://unicode.org/reports/tr17/tr17-3.html#Transfer Encoding Syntax
- ↑ "UTR#17: Modelo de codificación de caracteres" . 14 de julio de 2004.
- ↑ "UTR#17: Modelo de codificación de caracteres Unicode" . unicode.org . Consultado el 14 de noviembre de 2023 .
- ↑ "Este es un deflactor para salida UTF-8 para entrada comprimida en SCSU" . Archivado del original el 8 de septiembre de 1999.
- ↑ "Componentes internacionales para Unicode" . GitHub . 22 de octubre de 2021.
- ↑ "Implementación de compresión Unicode (Libros en línea de SQL Server 2008 R2)" . Consultado el 18 de agosto de 2008 .
- ↑ "Directrices de implementación" (PDF) . Archivado del original (PDF) el 30/07/2015.
- ↑ "8.2.2.3. Codificaciones de caracteres" . Estándar HTML 5.1 . W3C.
- ↑ "12.2.3.3 Codificaciones de caracteres" . HTML Living Standard . WHATWG.
- ↑ " < meta> - HTML" . MDN Web Docs . Mozilla. Archivado del original el 3 de octubre de 2018.
- Formatos de transformación Unicode