统一码二进制有序压缩

求闻百科,共笔求闻

统一码二进制有序压缩(英语:Binary Ordered Compression for Unicode,缩写:BOCU) 是统一码技术注解文件所定义的规范[1],可以兼容MIME的统一码压缩方案。

虽然UTF-8适合广泛使用,但对于非拉丁文和中日韩统一表意文字的文字,相较于代码页技术,它占用了更多的空间(较高的 "字节 / 码位" 之比)。另一方面,SCSU 占用的空间与代码页差不多,但却不相容于MIME。二进制有序压缩则结合了UTF-8的广泛适用性和统一码标准压缩方案(SCSU)的紧凑性。[1]

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

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


细节

本章节中使用的数字都是十六进制,且使用的范围都是包含在内。

统一码二进位有序压缩的核心概念在于:同一种语言的字符,通常被放在邻近位置(同一区段内),所以文件中的一个字符与前一个字符码值的差值是小的,可以用较少的字节来编码。

而实际作法上,不是直接使用前一个字符的码值,而是前一固字符归一化的码值,即所在区段的中间值。其对应如下:

编码范围 归一化码值 笔记
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 实现。 [3]IBM当时雇用了 BOCU-1 的两位发明者,在统一码技术说明中指出“完全兼容的 BOCU-1 版本”的实现者必须联系 IBM 以申请免版税许可。 [4]BOCU-1 是统一码网站上,目前唯一已知的受到知识产权限制的统一码压缩方案。

相比之下,IBM 也为UTF-EBCDIC申请专利,但它选择使文档和编码方案不要求对实施者申请许可证,而是“任何将转换格式成为 UCS 标准的一部分,将对他们们免费提供”。 [5]

参考

  1. 1.0 1.1 Markus Scherer, Mark Davis. UTN #6: BOCU-1: MIME-COMPATIBLE UNICODE COMPRESSION. 2006-02-04 [2008-05-18]. 
  2. IANA 中 BOCU-1 的注册记录
  3. Davis. United States Patent #6,737,994, "Binary-ordered compression for unicode". 2004-05-18 [2008-11-16].  无效|subscription=etal (帮助)
  4. Markus Scherer, Mark Davis. UTN #6: BOCU-1. 2006-02-04 [2014-02-05]. 
  5. V.S. Umamaheswaran. UTR #16: UTF-EBCDIC. 2002-04-16 [2008-11-16]. 


另见

  • UTF-1包含 UTF-1、 UTF-8和 BOCU-1 设计的比较
  • International Components for Unicode一个可以在 BOCU-1 和其他 Unicode 编码之间转换的库