El Esquema de compresión estándar para Unicode (SCSU) [1] es un estándar técnico Unicode para reducir la cantidad de bytes necesarios para representar texto Unicode, especialmente si ese texto utiliza principalmente caracteres de uno o un pequeño número de bloques de caracteres por idioma. Lo hace asignando 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 utilizan alfabetos pequeños y puntuación ASCII o puntuación que se ajusta a la ventana del alfabeto principal se pueden codificar a un byte por carácter (más la sobrecarga de configuración, que para los idiomas comunes suele ser de solo 1 byte), la mayoría de los demás signos de puntuación se pueden codificar a 2 bytes por símbolo mediante desplazamientos sin bloqueo. SCSU también puede cambiar a UTF-16 internamente para manejar idiomas no alfabéticos.
Reuters desarrolló originalmente SCSU, entonces bajo el nombre RCSU de Reuters Compression Scheme for Unicode. [2] [3] [4] [5]
En un principio, el Consorcio Unicode lo consideró una codificación de caracteres, [6] pero en 1999 cambió de opinión: aunque todavía se consideraba una sintaxis de codificación de transferencia, durante un tiempo dejó de considerarse una codificación de caracteres porque diferentes compresores podían producir diferentes resultados 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 lugar de 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 archivos adjuntos a TR6.
Symbian OS , un sistema operativo para teléfonos móviles y otros dispositivos móviles, utiliza SCSU para serializar cadenas.
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 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]
Las siguientes secciones describen brevemente la anatomía de una corriente SCSU comprimida. Para obtener una descripción completa (que coincida con la de un descompresor), consulte el documento UTS n.° 6.
SCSU se inicia en el modo de un solo byte, que utiliza la codificación comprimida de Window. Existen comandos para cambiar a un modo "Unicode" UTF-16BE y para cambiar al modo de un solo byte desde ese modo.
El núcleo de SCSU se encuentra 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 simples, y 6 tipos de ventanas dinámicas (además de ventanas de "medio bloque Unicode" y ventanas personalizadas para los planos complementarios) para escrituras que utilizan más caracteres.
Tanto las ventanas simples como las dinámicas se seleccionan mediante caracteres de comando especiales. Para caracteres individuales que no caben en el bloque actual, se proporcionan caracteres de comando para entrecomillar.
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 querer usar 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 una codificación de texto, debido a la naturaleza con estado del algoritmo pueden surgir dificultades al usarlo como una representación de texto interna ya que las operaciones de texto básicas dejan de ser triviales.
Considerado puramente como un algoritmo de compresión, SCSU es inferior a la mayoría de los algoritmos de propósito general utilizados para textos de más de unos pocos kilobytes.
SCSU tiene la ventaja de que puede comprimir textos de sólo unos pocos caracteres, mientras que la mayoría de los compresores a gran escala necesitan cientos de bytes de datos para compensar su propia sobrecarga. En Symbian OS , SCSU se utiliza incluso para operaciones del Portapapeles, por ejemplo, Cortar, Copiar y Pegar pequeñas cadenas de texto.
Los estándares HTML del W3C [14] [15] y WHATWG [16] prohíben la compatibilidad con SCSU en documentos HTML porque HTML no fue diseñado teniendo en mente codificaciones no compatibles con ASCII. En el pasado, se han demostrado vulnerabilidades de secuencias de comandos entre sitios debido a un manejo deficiente de dichas codificaciones por parte de los navegadores. [17]
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 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.