Двоичное упорядоченное сжатие для 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
. Отображение нормализации выглядит следующим образом:
Кодовый диапазон | Нормализованный код | Заметки |
---|---|---|
U+3040 к U+309F | U+3070 | Хирагана |
U+4E00 к U+9FA5 | U+7711 | Unihan |
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
и может встречаться как следящий байт.
Патент [ править ]
Общий алгоритм BOCU защищен патентом США № 6737994, в котором также упоминается конкретная реализация BOCU-1. [5] IBM , которая использовала обоих изобретателей BOCU-1 во время его создания, заявляет в Техническом примечании Unicode, что разработчики «полностью совместимой версии BOCU-1» должны связаться с IBM, чтобы запросить бесплатное лицензия. [6] BOCU-1 - единственная схема сжатия Unicode, описанная на веб-сайте Unicode, которая, как известно, обременена ограничениями интеллектуальной собственности .
В отличие от этого, IBM также подала заявку на патент на UTF-EBCDIC , но в этом случае решила сделать документацию и схему кодирования «свободно доступными для всех, кто заинтересован в создании формата преобразования как части стандартов UCS», вместо того, чтобы требовать от разработчиков запросить лицензию. [7]
Ссылки [ править ]
- ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1» . Проверено 18 мая 2008 .
- ^ Юэлл, Дуг (2004-01-30). «UTN # 14: Обзор сжатия Unicode» (PDF) . Проверено 13 июня 2008 .
- ^ Регистрационная запись IANA для SCSU
- ^ Регистрационная запись IANA для BOCU-1
- ^ Дэвис ; и другие. (2004-05-18). «Патент США № 6,737,994,« Упорядоченное двоичное сжатие для юникода » » . Проверено 16 ноября 2008 .
- ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1» . Проверено 5 февраля 2014 .
- ^ VS Umamaheswaran (2002-04-16). «UTR №16: UTF-EBCDIC» . Проверено 16 ноября 2008 .
См. Также [ править ]
- UTF-1 содержит сравнение дизайнов UTF-1, UTF-8 и BOCU-1.
- Международные компоненты для Unicode Библиотека, которая может конвертировать между BOCU-1 и другими кодировками Unicode.