Введение
Стандартная схема сжатия для Юникода (SCSU) — это технический стандарт Юникода, предназначенный для уменьшения количества байтов, необходимых для представления текста Юникода, особенно если этот текст в основном использует символы из одного или небольшого числа блоком символов для конкретного языка. Это достигается за счет динамического сопоставления значений в диапазоне 128–255 со смещениями внутри определенных блоков по 128 символов. Начальные условия кодировщика позволяют рассматривать существующие строки в ASCII и ISO 8859-1, не содержащие управляющих кодов C0, кроме NULL, TAB, CR и LF, как строки SCSU. Поскольку большинство алфавитов расположены в блоках смежных кодовых точек Юникода, тексты, использующие небольшие алфавиты и пунктуацию ASCII или пунктуацию, которая помещается в окно для основного алфавита, могут быть закодированы с использованием одного байта на символ (плюс служебные накладные расходы, которые для распространенных языков часто составляют всего 1 байт). Большинство других знаков пунктуации могут быть закодированы с использованием 2 байтов на символ посредством небезопасных сдвигов. SCSU также может переключаться на UTF-16 внутри для обработки неалфавитных языков.
The Standard Compression Scheme for Unicode (SCSU) is a Unicode Technical Standard for reducing the number of bytes needed to represent Unicode text, especially if that text uses mostly characters from one or a small number of per language character blocks. It does so by dynamically mapping values in the range 128–255 to offsets within particular blocks of 128 characters. The initial conditions of the encoder mean that existing strings in ASCII and ISO 8859 1 that do not contain C0 control codes other than NULL TAB CR and LF can be treated as SCSU strings. Since most alphabets do reside in blocks of contiguous Unicode codepoints, texts that use small alphabets and either ASCII punctuation or punctuation that fits within the window for the main alphabet can be encoded at one byte per character (plus setup overhead, which for common languages is often only 1 byte), most other punctuation can be encoded at 2 bytes per symbol through non locking shifts. SCSU can also switch to UTF 16 internally to handle non alphabetic languages.
История и использование
Reuters первоначально разработал SCSU, ранее известную как RCSU (Reuters Compression Scheme for Unicode). Изначально Консорциум Unicode рассматривал SCSU как кодировку символов, но в 1999 году изменил свое решение: хотя она по-прежнему считалась синтаксисом кодирования для передачи, некоторое время она перестала рассматриваться как кодировка символов, поскольку разные компрессоры могли выдавать различные результаты для одного и того же текста. Однако в 2004 году это решение было отменено, и теперь SCSU считается схемой сжатой кодировки символов, в отличие от простой или составной схемы кодировки символов. Роман Чибора (из GNU Unifont) написал декомпрессор. Декомпрессор, разработанный IBM, входит в состав International Components for Unicode, наряду с компрессором, написанным на Java. Более простые эталонные кодеки доступны в виде приложений к TR6. Symbian OS, операционная система для мобильных телефонов и других мобильных устройств, использует SCSU для сериализации строк. SQL Server 2008 R2 использует SCSU для сжатия Unicode-значений (то есть строк в кодировке UCS-2), хранящихся в столбцах nchar(n) и nvarchar(n), что позволяет экономить место от 15% до 50% (в то время как UTF-8 обеспечивает такое сокращение только на 50% для подмножества ASCII Unicode), в зависимости от языка данных.
Схема
В следующих разделах кратко описывается структура сжатого потока SCSU. Полное описание (соответствующее описанию декомпрессора) можно найти в документе UTS #6.
Режимы кодирования
SCSU запускается в однобайтовом режиме, использующем сжатое кодирование окна. Существуют команды для переключения в режим UTF-16BE "Unicode" и для возврата в однобайтовый режим из этого режима.
Кодирование окна
Ядро SCSU основано на окнах, для которых определены значения байтов 0x80–0xff. Существует восемь статических окон для более простых систем письма и пунктуации, и шесть типов динамических окон (плюс окна "половинного Unicode-блока" и пользовательские окна для дополнительных плоскостей) для систем письма, использующих больше символов. Как простые, так и динамические окна выбираются с помощью специальных командных символов. Для отдельных символов, не помещающихся в текущий блок, предусмотрены командные символы для экранирования.
Сравнение с схемами сжатия обычного текста общего назначения
Поскольку текст в кодировках UTF-16 или UTF-8 может занимать больше места, чем его эквивалент в более ранних кодировках, для решения этой проблемы можно использовать сжатие, например, SCSU. Однако, по сравнению с универсальными алгоритмами сжатия, использование SCSU не всегда является преимуществом. Это также актуально для стандартов WHATWG HTML, поскольку HTML изначально не разрабатывался с учетом не-ASCII совместимых кодировок. В прошлом были продемонстрированы уязвимости межсайтового скриптинга, вызванные некорректной обработкой таких кодировок браузерами.