Введение

Стандартная схема сжатия для Юникода (SCSU) — это технический стандарт Юникода, предназначенный для уменьшения количества байтов, необходимых для представления текста Юникода, особенно если этот текст в основном использует символы из одного или небольшого числа блоком символов для конкретного языка. Это достигается за счет динамического сопоставления значений в диапазоне 128–255 со смещениями внутри определенных блоков по 128 символов. Начальные условия кодировщика позволяют рассматривать существующие строки в ASCII и ISO 8859-1, не содержащие управляющих кодов C0, кроме NULL, TAB, CR и LF, как строки SCSU. Поскольку большинство алфавитов расположены в блоках смежных кодовых точек Юникода, тексты, использующие небольшие алфавиты и пунктуацию ASCII или пунктуацию, которая помещается в окно для основного алфавита, могут быть закодированы с использованием одного байта на символ (плюс служебные накладные расходы, которые для распространенных языков часто составляют всего 1 байт). Большинство других знаков пунктуации могут быть закодированы с использованием 2 байтов на символ посредством небезопасных сдвигов. SCSU также может переключаться на UTF-16 внутри для обработки неалфавитных языков.

История и использование

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 совместимых кодировок. В прошлом были продемонстрированы уязвимости межсайтового скриптинга, вызванные некорректной обработкой таких кодировок браузерами.