stringtranslate.com

Двоичное упорядоченное сжатие для Юникода

Двоичное упорядоченное сжатие для Юникода ( BOCU ) — это MIME- совместимая схема сжатия Юникода. BOCU-1 сочетает в себе широкую применимость UTF-8 с компактностью стандартной схемы сжатия для Unicode (SCSU). Эта кодировка Unicode предназначена для сжатия коротких строк и поддерживает порядок кодовых точек. BOCU-1 указан в Техническом примечании Unicode. [1]

Для сравнения SCSU был принят в качестве стандартной схемы сжатия Unicode с соотношением байт/кодовая точка, аналогичным кодовым страницам для конкретного языка . SCSU не получил широкого распространения, поскольку не подходит для «текстовых» типов мультимедиа MIME. Например, SCSU нельзя использовать непосредственно в электронной почте и подобных протоколах. Для обеспечения хорошей производительности SCSU требуется сложная конструкция кодера. Обычно zip , bzip2 и другие стандартные алгоритмы более эффективно сжимают большие объемы текста в Юникоде. [2]

И SCSU [3] , и BOCU-1 [4] являются зарегистрированными кодировками IANA .

Подробности

Все числа в этом разделе являются шестнадцатеричными , и все диапазоны включаются.

Кодовые точки от U+0000до U+0020кодируются в BOCU-1 как соответствующее значение байта. Все остальные кодовые точки (то есть U+0021до U+D7FFконца ) кодируются как разница между кодовой точкой и нормализованной версией самой последней кодированной точки, которая не была пространством ASCII ( U+E000) . Исходное состояние . Отображение нормализации выглядит следующим образом:U+10FFFFU+0020U+0040

Разница между текущей кодовой точкой и нормализованной предыдущей кодовой точкой кодируется следующим образом:

Каждый диапазон байтов упорядочен лексикографически, за исключением следующих тринадцати байтовых значений: 00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20. Например, за последовательностью байтов FC 06 FF, кодирующей разницу 1156B, сразу следует последовательность байтов FC 10 01, кодирующая разницу 1156C.

Любой ввод ASCII U+0000для U+007Fисключения пробела U+0020сбрасывает кодировщик на U+0040. Поскольку вышеупомянутые значения охватывают конечные кодовые точки строки U+000Dи U+000A как есть ( 0D 0A), кодер находится в известном состоянии в начале каждой строки. Таким образом, повреждение одного байта затрагивает не более одной строки. Для сравнения, повреждение одного байта в UTF-8 влияет не более чем на одну кодовую точку, а в SCSU — на весь документ.

BOCU-1 обеспечивает аналогичную надежность и для входных текстов без вышеупомянутых значений со специальным кодом сброса 0xFF. Когда декодер находит этот октет, он сбрасывает свое состояние на U+0040состояние конца строки. Использование 0xFFбайтов сброса не рекомендуется в спецификации BOCU-1, поскольку это противоречит другим целям проектирования BOCU-1, особенно двоичному порядку .

Необязательное использование подписи U+FEFFв начале закодированных BOCU-1 текстов, т.е. последовательности байтов BOCU-1 FB EE 28, меняет исходное состояние U+0040на U+FEC0. Другими словами, подпись нельзя просто удалить, как в большинстве других схем кодирования Unicode. Добавление байта сброса после подписи ( FB EE 28 FF) могло бы избежать этого эффекта, но спецификация BOCU-1 не рекомендует такую ​​практику.

Теоретически UTF-1 и UTF-8 могут кодировать исходный набор UCS-4 с 31 битом до 7FFFFFFF. BOCU-1 и UTF-16 могут кодировать современный набор Unicode от U+0000до U+10FFFF. За исключением тринадцати защищенных кодовых точек, закодированных как одиночные октеты, BOCU-1 может использовать октеты в многобайтовых кодировках. BOCU-1 требуется не более четырех байтов, состоящих из ведущего байта и одного-трех завершающих байтов. Байты следа кодируют оставшуюся разницу « по модулю 243» (по основанию 243), ведущий байт определяет количество байтов следа и начальную разницу. Обратите внимание, что байт сброса не защищен и может использоваться как следовой байт.0xFF

Патент

До 16 ноября 2022 года общий алгоритм BOCU был описан в патенте США № 6737994, в котором также упоминается конкретная реализация BOCU-1. [5] Срок действия этого патента истек.

IBM , в которой работали оба изобретателя BOCU-1 на момент его создания, заявила в Техническом примечании к Unicode, что разработчики «полностью совместимой версии BOCU-1» должны были связаться с IBM, чтобы запросить бесплатную лицензию. [6] BOCU-1 — единственная схема сжатия Unicode, описанная на веб-сайте Unicode, которая, как известно, обременена ограничениями интеллектуальной собственности .

Напротив, IBM также подала заявку на патент на UTF-EBCDIC , но в этом случае решила сделать документацию и схему кодирования «свободно доступными для всех, кто заинтересован в том, чтобы сделать формат преобразования частью стандартов UCS», вместо того, чтобы требовать от разработчиков. запросить лицензию. [7]

Рекомендации

  1. ^ Маркус Шерер, Марк Дэвис (4 февраля 2006 г.). «УТН №6: БОКУ-1» . Проверено 18 мая 2008 г.
  2. ^ Юэлл, Дуг (30 января 2004 г.). «UTN № 14: Обзор сжатия Unicode» (PDF) . Проверено 13 июня 2008 г.
  3. ^ Запись о регистрации IANA для SCSU.
  4. ^ Запись регистрации IANA для BOCU-1
  5. ^ Дэвис ; и другие. (18 мая 2004 г.). «Патент США № 6,737,994, «Двоично-упорядоченное сжатие для Юникода»» . Проверено 28 декабря 2022 г.
  6. ^ Маркус Шерер, Марк Дэвис (4 февраля 2006 г.). «УТН №6: БОКУ-1» . Проверено 5 февраля 2014 г.
  7. ^ ПРОТИВ Умамахесварана (16 апреля 2002 г.). «UTR № 16: UTF-EBCDIC» . Проверено 16 ноября 2008 г.

Смотрите также