Бинарное упорядоченное сжатие для 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 + 309F | U + 3070 | Хирагана |
U + 4E00 к U + 9FA5 | U + 7711 | Unihan |
U + AC00 к U + D7A3 | U + C1D1 | Хангыль |
U + 0020 | состояние кодировщика сохраняется как есть | Космос |
U +хххх00 к U +хххх7F (исключая указанные выше диапазоны) | U + hhhh40 | середина из 128 |
U +хххх80 к U +ххххFF (исключая указанные выше диапазоны) | U +ххххC0 | середина из 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 влияет не более чем на одну кодовую точку, для ГКГУ это может повлиять на весь документ.
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]
Рекомендации
- ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1». Получено 2008-05-18.
- ^ Юэлл, Дуг (30 января 2004). "UTN # 14: Обзор сжатия Unicode" (PDF). Получено 2008-06-13.
- ^ Регистрационная запись IANA для SCSU
- ^ Регистрационная запись IANA для BOCU-1
- ^ Дэвис; и другие. (2004-05-18). "Патент США № 6,737,994," двоичное сжатие для юникода."". Получено 2008-11-16.
- ^ Маркус Шерер, Марк Дэвис (2006-02-04). «УТН №6: БОКУ-1». Получено 2014-02-05.
- ^ ПРОТИВ. Умамахесваран (16 апреля 2002 г.). "UTR # 16: UTF-EBCDIC". Получено 2008-11-16.
- ^ «8.2.2.3. Кодировки символов». HTML 5.1 Стандартный. W3C.
- ^ «8.2.2.3. Кодировки символов». HTML 5 Стандартный. W3C.
- ^ «12.2.3.3 Кодировки символов». Уровень жизни HTML. WHATWG.
- ^ « - HTML». Веб-документы MDN. Mozilla.
Смотрите также
- UTF-1 содержит сравнение UTF-1, UTF-8, и конструкции BOCU-1
- Международные компоненты для Unicode Библиотека, которая может конвертировать между BOCU-1 и другими кодировками Unicode.