Бинарное упорядоченное сжатие для Unicode - Binary Ordered Compression for Unicode

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

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

Оба ГКГУ[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 + 309FU + 3070Хирагана
U + 4E00 к U + 9FA5U + 7711Unihan
U + AC00 к U + D7A3U + C1D1Хангыль
U + 0020состояние кодировщика сохраняется как естьКосмос
U +хххх00 к U +хххх7F
(исключая указанные выше диапазоны)
U + hhhh40середина
из 128
U +хххх80 к U +ххххFF
(исключая указанные выше диапазоны)
U +ххххC0середина
из 128

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

Диапазон разницыДиапазон байтовой последовательности
(Смотри ниже)
-10FF9F к -2DD0D21 F0 58 D9 к 21 FF FF FF
-2DD0C к -291222 01 01 к 24 FF FF
-2911 к -4125 01 к 4F FF
-40 к 3F50 к CF
40 к 2910D0 01 к FA FF
2911 к 2DD0BFB 01 01 к FD FF FF
2DD0C к 10FFBFFE 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 влияет не более чем на одну кодовую точку, для ГКГУ это может повлиять на весь документ.

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 описывается Патент США # 6,737,994, где также упоминается конкретная реализация BOCU-1.[5] IBM, в котором работали оба изобретателя BOCU-1 на момент его создания, в Техническом примечании Unicode говорится, что разработчики «полностью совместимой версии BOCU-1» должны связаться с IBM для запроса бесплатной лицензии.[6] BOCU-1 - единственная схема сжатия Unicode, описанная на веб-сайте Unicode, которая, как известно, перегружена интеллектуальная собственность ограничения.

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

В HTML

Поддержка BOCU-1 в HTML документы запрещены W3C[8][9] и WHATWG[10] Стандарты HTML, поскольку они представляют межсайтовый скриптинг уязвимость.[11]

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

  1. ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1». Получено 2008-05-18.
  2. ^ Юэлл, Дуг (30 января 2004). "UTN # 14: Обзор сжатия Unicode" (PDF). Получено 2008-06-13.
  3. ^ Регистрационная запись IANA для SCSU
  4. ^ Регистрационная запись IANA для BOCU-1
  5. ^ Дэвис; и другие. (2004-05-18). "Патент США № 6,737,994," двоичное сжатие для юникода."". Получено 2008-11-16.
  6. ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1». Получено 2014-02-05.
  7. ^ ПРОТИВ. Умамахесваран (16 апреля 2002 г.). "UTR # 16: UTF-EBCDIC". Получено 2008-11-16.
  8. ^ «8.2.2.3. Кодировки символов». HTML 5.1 Стандартный. W3C.
  9. ^ «8.2.2.3. Кодировки символов». HTML 5 Стандартный. W3C.
  10. ^ «12.2.3.3 Кодировки символов». Уровень жизни HTML. WHATWG.
  11. ^ « - HTML». Веб-документы MDN. Mozilla.

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