Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Подробности [ править ]

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

Кодовые точки от U+0000до U+0020кодируются в BOCU-1 как соответствующее значение байта. Все остальные кодовые точки (то есть, U+0021через U+D7FFи U+E000через U+10FFFF) кодируются как разность между точкой коды и нормализованной версией последним кодированным кодом точки , которая не является ASCII - пространства ( U+0020). Начальное состояние U+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 и может встречаться как следящий байт.

Патент [ править ]

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

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

Ссылки [ править ]

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

См. Также [ править ]

  • UTF-1 содержит сравнение дизайнов UTF-1, UTF-8 и BOCU-1.
  • Международные компоненты для Unicode Библиотека, которая может конвертировать между BOCU-1 и другими кодировками Unicode.