Двоичное упорядоченное сжатие для Юникода
Двоичное упорядоченное сжатие для Юникода ( BOCU ) — это MIME- совместимая схема сжатия Юникода. BOCU-1 сочетает в себе широкую применимость UTF-8 с компактностью стандартной схемы сжатия для Unicode (SCSU). Эта Unicode кодировка предназначена для сжатия коротких строк и поддерживает порядок кодовых точек. BOCU-1 указан в Техническом примечании Unicode. [1]
Для сравнения SCSU был принят в качестве стандартной схемы сжатия Unicode с соотношением байт/кодовая точка, аналогичным кодовым страницам для конкретного языка . SCSU не получил широкого распространения, поскольку не подходит для «текстовых» типов мультимедиа MIME. Например, SCSU нельзя использовать непосредственно в электронной почте и подобных протоколах. Для обеспечения хорошей производительности SCSU требуется сложная конструкция кодера. Обычно алгоритмы zip , bzip2 и другие стандартные отраслевые алгоритмы более эффективно сжимают большие объемы текста в Юникоде. [2]
Оба ГКСУ [3] и БОКУ-1 [4] являются зарегистрированными IANA кодировками.
Подробности
[ редактировать ]Все числа в этом разделе являются шестнадцатеричными , и все диапазоны включаются.
Кодовые точки из U+0000
к U+0020
кодируются в BOCU-1 как соответствующее значение байта. Все остальные кодовые точки (т. е. U+0021
через U+D7FF
и U+E000
через U+10FFFF
) кодируются как разница между кодовой точкой и нормализованной версией самой последней кодированной точки, которая не была пространством ASCII ( U+0020
). Исходное состояние U+0040
. Отображение нормализации выглядит следующим образом:
Диапазон кода | Нормализованная кодовая точка | Примечания |
---|---|---|
U+3040 к U+309F | U+3070 | Хирагана |
U+4E00 к U+9FA5 | U+7711 | Объединяйтесь |
U+AC00 к U+D7A3 | U+C1D1 | хангыль |
U+0020 | состояние энкодера сохраняется как есть | Космос |
U+hhhh00 к U+hhhh7F (исключая диапазоны, указанные выше) | U+hhhh40 | середина из 128 |
U+hhhh80 к U+hhhhFF (исключая диапазоны, указанные выше) | U+hhhhC0 | середина из 128 |
Разница между текущей кодовой точкой и нормализованной предыдущей кодовой точкой кодируется следующим образом:
Диапазон различий | Диапазон последовательности байтов (см. ниже) |
---|---|
-10FF9F к -2DD0D | 21 F0 58 D9 к 21 FF FF FF |
-2DD0C к -2912 | 22 01 01 к 24 FF FF |
-2911 к -41 | 25 01 к 4F FF |
-40 к 3F | 50 к CF |
40 к 2910 | D0 01 к FA FF |
2911 к 2DD0B | FB 01 01 к FD FF FF |
2DD0C к 10FFBF | FE 01 01 01 к FE 19 B4 54 |
Каждый диапазон байтов упорядочен лексикографически, за исключением следующих тринадцати байтовых значений: 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]
Ссылки
[ редактировать ]- ^ Маркус Шерер, Марк Дэвис (4 февраля 2006 г.). «УТН №6: БОКУ-1» . Проверено 18 мая 2008 г.
- ^ Юэлл, Дуг (30 января 2004 г.). «UTN № 14: Обзор сжатия Unicode» (PDF) . Проверено 13 июня 2008 г.
- ^ Запись о регистрации IANA для SCSU.
- ^ Запись регистрации IANA для BOCU-1
- ^ Дэвис ; и др. (18 мая 2004 г.). «Патент США № 6,737,994, «Двоично-упорядоченное сжатие для Юникода» » . Проверено 28 декабря 2022 г.
- ^ Маркус Шерер, Марк Дэвис (4 февраля 2006 г.). «УТН №6: БОКУ-1» . Проверено 5 февраля 2014 г.
- ^ против Умамахесварана (16 апреля 2002 г.). «UTR № 16: UTF-EBCDIC» . Проверено 16 ноября 2008 г.
См. также
[ редактировать ]- UTF-1 содержит сравнение дизайнов UTF-1, UTF-8 и BOCU-1.
- Международные компоненты для Unicode. Библиотека, которая может конвертировать BOCU-1 и другие кодировки Unicode.