統一碼二進制有序壓縮

维基百科,自由的百科全书
跳到导航 跳到搜索

統一碼二進制有序壓縮[1](英語:Binary Ordered Compression for Unicode,縮寫:BOCU) 是統一碼技術注解文件所定義的規範[2],可以兼容MIME的統一碼压缩方案。

雖然UTF-8適合廣泛使用,但對於非拉丁文和中日韓統一表意文字的文字,相較於代码页技術,它佔用了更多的空間(較高的 "字節 / 碼位" 之比)。另一方面,SCSU 佔用的空間與代碼頁差不多,但卻不相容於MIME。二進制有序壓縮則结合了UTF-8的廣泛適用性和統一碼標準壓縮方案(SCSU)的紧凑性。[2]

这种编码旨在用于压缩短字符串,并保持码点顺序。

BOCU-1 是IANA注册的字符集[3]


细节[编辑]

本章節中使用的數字都是十六進制,且使用的範圍都是包含在内。

統一碼二進位有序壓縮的核心概念在於:同一種語言的字符,通常被放在鄰近位置(同一區段內),所以文件中的一個字符與前一個字符碼值的差值是小的,可以用較少的字節來編碼。

而實際作法上,不是直接使用前一個字符的碼值,而是前一固字符歸一化的碼值,即所在區段的中間值。其對應如下:

編碼范围 歸一化碼值 笔记
U+3040U+309F U+3070 平假名
U+4E00U+9FA5 U+7711 中日韓統一表意文字
U+AC00U+D7A3 U+C1D1 韩文
U+0020 编码器状态保持原样 空格
U+ hhhh00U+hhhh7F

不包括上述范围)

U+hhhh40 中间
共 128 个
U+hhhh80U+hhhhFF

不包括上述范围)

U+hhhhC0 中间
共 128 个


此壓縮法的規則為,U+0000U+002的的码位使用其原本的值。其他码位(即U+0021U+D7FFU+E000U+10FFFF ),則計算其與前一個字符的歸一化版本的碼值差值,並對此差值編碼。

差值的編碼規則如下:

差值範圍 字节序列范围
(见下文)
-10FF9F-2DD0D 21 F0 58 D921 FF FF FF
-2DD0C-2912 22 01 0124 FF FF
-2911-41 25 014F FF
-403F 50CF
402910 D0 01FA FF
29112DD0B FB 01 01FD FF FF
2DD0C10FFBF FE 01 01 01FE 19 B4 54

每个位元范围按字典顺序排序,但不包括以下十三个字节值: 00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20 。例如,差值為 1156B 的編碼,其字節序列 FC 06 FF 。紧接着差值為 1156C 的編碼,是字节序列FC 10 01 (第三個字節,從 FF 跳過了 0001 ,而第二個字節,從 06 跳過了 07 08 09 0A 0B 0C 0D 0E 0F10)。

除了空格U+0020為例外,對所有 ASCII 字符U+0000U+007F,编码器會重置为U+0040 。由於上述的按原样包含了行尾码位U+000DU+000A (0D 0A ),因此编码器在每行的开头处于已知状态。因此,单个字节的损坏最多影响一行。相比之下,UTF-8单个字节的损坏最多影响一个字符,对于SCSU来说,則可能會影响整个文档。

對於没有上述值的文本,BOCU-1 亦提供了类似的穩健性,带有特殊的重置代码0xFF 。当解码器找到这个八位字节时,它会将其状态重置为U+0040就像行尾一样。 BOCU-1 规范中不推荐使用0xFF复位字节,因为它与其他 BOCU-1 设计目标相冲突,尤其是二进制顺序

在BOCU-1编码文本的开始处,可選擇地使用签名U+FEFF,其字節串列為 FB EE 28 ,會将初始状态由U+0040改U+FEC0 。换句话说,無法像其他大多數的統一碼编码方案一样简单地剥离簽名。若額外添加一個復位字節,使之成為字節順序 FB EE 28 FF ,則可以避免这种影响,但 BOCU-1 规范不推荐这种做法。

理论上,UTF-1UTF-8可以為原始UCS-4集(使用 31 位元、上到7FFFFFFF)編碼。 BOCU-1 和UTF-16可以為現代統一碼集(U+0000U+10FFFF)。排除 13 個受保護碼位外, BOCU-1 单个位元組可以為 多字节编码。 BOCU-1 最多需要四个位元組,包括一个前导字元和一到三个尾端位元組。尾字节编码剩余的“243”(基数 243)差,前导字节确定尾字节数和初始差。请注意,复位字节0xFF不受保护,可以作为尾字节出现。

专利[编辑]

在美国专利#6,737,994 中,涵盖了通用 BOCU 算法,同時还提到了特定的 BOCU-1 实现。 [4] IBM當時雇用了 BOCU-1 的两位发明者,在統一碼技术说明中指出「完全兼容的 BOCU-1 版本」的实现者必须联系 IBM 以申请免版税许可。 [5] BOCU-1 是統一碼网站上,目前唯一已知的受到知识产权限制的統一碼压缩方案。

相比之下,IBM 也為UTF-EBCDIC申請专利,但它选择使文档和编码方案不要求對實施者申請許可證,而是「任何将轉換格式成为 UCS 标准的一部分,將對他們們免费提供」。 [6]

参考[编辑]

另見[编辑]

  • UTF-1包含 UTF-1、 UTF-8和 BOCU-1 设计的比较
  • International Components for Unicode一个可以在 BOCU-1 和其他 Unicode 编码之间转换的库
  1. ^ About Unicode Terminology. unicode.org. [2021-12-10]. (原始内容存档于2021-04-21). 
  2. ^ 2.0 2.1 Markus Scherer, Mark Davis. UTN #6: BOCU-1: MIME-COMPATIBLE UNICODE COMPRESSION. 2006-02-04 [2008-05-18]. (原始内容存档于2021-12-08). 
  3. ^ IANA 中 BOCU-1 的註冊記錄. [2021-11-16]. (原始内容存档于2020-08-11). 
  4. ^ Davis. United States Patent #6,737,994, "Binary-ordered compression for unicode". 2004-05-18 [2008-11-16]. (原始内容存档于2019-04-15).  无效|subscription=etal (帮助)
  5. ^ Markus Scherer, Mark Davis. UTN #6: BOCU-1. 2006-02-04 [2014-02-05]. (原始内容存档于2021-12-08). 
  6. ^ V.S. Umamaheswaran. UTR #16: UTF-EBCDIC. 2002-04-16 [2008-11-16]. (原始内容存档于2022-01-30).