添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移]) |
小 (机器人:清理不当的来源、移除无用的模板参数) |
||
(未显示1个用户的2个中间版本) | |||
第1行: | 第1行: | ||
''' |
'''统一碼二进制有序压缩'''({{Lang-en|Binary Ordered Compression for Unicode}},缩写:'''BOCU''') 是统一碼技术注解文件所定义的规范<ref name=":0" />,可以兼容[[多用途互联网邮件扩展|MIME]]的统一碼压缩方案。 |
||
虽然[[UTF-8]]适合广泛使用,但对于非拉丁文和[[中日韩统一表意文字]]的文字,相较于[[代码页]]技术,它佔用了更多的空间(较高的 "字节 / 碼位" 之比)。另一方面,SCSU 佔用的空间与代碼頁差不多,但卻不相容于MIME。二进制有序压缩则结合了[[UTF-8]]的广泛适用性和[[统一碼标準压缩方案]](SCSU)的紧凑性。<ref name=":0">{{Cite web|title=UTN #6: BOCU-1: MIME-COMPATIBLE UNICODE COMPRESSION|url=https://www.unicode.org/notes/tn6/|access-date=2008-05-18|author=Markus Scherer, [[Mark Davis (Unicode)|Mark Davis]]|date=2006-02-04}}</ref> |
|||
这种[[字符编码|编码]]旨在用于压缩短字符串,并保持码点顺序。 |
这种[[字符编码|编码]]旨在用于压缩短字符串,并保持码点顺序。 |
||
BOCU-1 是[[互联网号码分配局|IANA]]注册的字符集<ref>[https://www.iana.org/assignments/charset-reg/BOCU-1 IANA 中 BOCU-1 的 |
BOCU-1 是[[互联网号码分配局|IANA]]注册的字符集<ref>[https://www.iana.org/assignments/charset-reg/BOCU-1 IANA 中 BOCU-1 的注册记录]</ref>。 |
||
== 细节 == |
== 细节 == |
||
本章 |
本章节中使用的数字都是[[十六进制]],且使用的范围都是包含在内。 |
||
统一碼二进位有序压缩的核心概念在于:同一种语言的字符,通常被放在邻近位置(同一区段内),所以文件中的一个字符与前一个字符碼值的差值是小的,可以用较少的字节来编碼。 |
|||
而 |
而实际作法上,不是直接使用前一个字符的碼值,而是前一固字符归一化的碼值,即所在区段的中间值。其对应如下: |
||
{| class="wikitable" |
{| class="wikitable" |
||
! style="width: auto;" | |
! style="width: auto;" |编碼范围 |
||
! style="width: auto;" | |
! style="width: auto;" |归一化碼值 |
||
! style="width: auto;" |笔记 |
! style="width: auto;" |笔记 |
||
|- |
|- |
||
第25行: | 第25行: | ||
|<code>U+4E00</code>至<code>U+9FA5</code> |
|<code>U+4E00</code>至<code>U+9FA5</code> |
||
| <code>U+7711</code> |
| <code>U+7711</code> |
||
|[[中日 |
|[[中日韩统一表意文字]] |
||
|- |
|- |
||
|<code>U+AC00</code>至<code>U+D7A3</code> |
|<code>U+AC00</code>至<code>U+D7A3</code> |
||
第47行: | 第47行: | ||
此 |
此压缩法的规则为,<code>U+0000</code>到<code>U+002的</code>的码位使用其原本的值。其他码位(即<code>U+0021</code>到<code>U+D7FF</code>和<code>U+E000</code>到<code>U+10FFFF</code> ),则计算其与前一个字符的归一化版本的碼值差值,并对此差值编碼。 |
||
差值的 |
差值的编碼规则如下: |
||
{| class="wikitable" |
{| class="wikitable" |
||
! style="width: auto;" |差值 |
! style="width: auto;" |差值范围 |
||
! style="width: auto;" |字节序列范围<br /><small>(见下文)</small> |
! style="width: auto;" |字节序列范围<br /><small>(见下文)</small> |
||
|- |
|- |
||
第75行: | 第75行: | ||
| <code>FE</code> <code>01</code> <code>01</code> <code>01</code>至<code>FE</code> <code>19</code> <code>B4</code> <code>54</code> |
| <code>FE</code> <code>01</code> <code>01</code> <code>01</code>至<code>FE</code> <code>19</code> <code>B4</code> <code>54</code> |
||
|} |
|} |
||
每个位元范围按[[字典序|字典顺序]]排序,但不包括以下十三个字节值: <code>00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20</code> 。例如,差值 |
每个位元范围按[[字典序|字典顺序]]排序,但不包括以下十三个字节值: <code>00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20</code> 。例如,差值为 <code>1156B</code> 的编碼,其字节序列 <code>FC 06 FF</code> 。紧接着差值为 <code>1156C</code> 的编碼,是字节序列<code>FC 10 01</code> (第三个字节,从 <code>FF</code> 跳过了 <code>00</code> 到 <code>01</code> ,而第二个字节,从 <code>06</code> 跳过了 <code>07 08 09 0A 0B 0C 0D 0E 0F</code> 到 <code>10</code>)。 |
||
除了空格<code>U+0020</code> |
除了空格<code>U+0020</code>为例外,对所有 ASCII 字符<code>U+0000</code>到<code>U+007F</code>,编码器会重置为<code>U+0040</code> 。由于上述的'''按原样'''包含了行尾码位<code>U+000D</code>和<code>U+000A</code> (<code>0D 0A</code> ),因此编码器在每行的开头处于已知状态。因此,单个字节的损坏最多影响一行。相比之下,[[UTF-8]]单个字节的损坏最多影响一个字符,对于SCSU来说,则可能会影响整个文档。 |
||
对于没有上述值的文本,BOCU-1 亦提供了类似的稳健性,带有特殊的重置代码<code>0xFF</code> 。当解码器找到这个八位字节时,它会将其状态重置为<code>U+0040</code>就像行尾一样。 BOCU-1 规范中不推荐使用<code>0xFF</code>复位字节,因为它与其他 BOCU-1 设计目标相冲突,尤其是''二进制顺序''。 |
|||
在BOCU-1编码文本的开始处,可 |
在BOCU-1编码文本的开始处,可选择地使用签名[[位元组顺序记号|<code>U+FEFF</code>]],其字节串列为 <code>FB EE 28 ,</code>会将初始状态由<code>U+0040改</code>为<code>U+FEC0</code> 。换句话说,无法像其他大多数的统一碼编码方案一样简单地剥离签名。若額外添加一个复位字节,使之成为字节顺序 <code>FB EE 28 FF</code> ,则可以避免这种影响,但 BOCU-1 规范不推荐这种做法。 |
||
理论上,[[UTF-1]]和[[UTF-8]]可以 |
理论上,[[UTF-1]]和[[UTF-8]]可以为原始[[通用字符集|UCS-4]]集(使用 31 位元、上到<code>7FFFFFFF)</code>编碼。 BOCU-1 和[[UTF-16]]可以为现代[[统一碼]]集(<code>U+0000</code>到<code>U+10FFFF)</code>。排除 13 个受保护碼位外, BOCU-1 单个位元组可以为 <math>256 - 13 = 243</math>多字节编码。 BOCU-1 最多需要四个位元组,包括一个前导字元和一到三个尾端位元组。尾字节编码剩余的“[[模除|模]]243”(基数 243)差,前导字节确定尾字节数和初始差。请注意,复位字节<code>0xFF</code>不受''保护'',可以作为尾字节出现。 |
||
== 专利 == |
== 专利 == |
||
在美国专利#6,737,994 中,涵盖了通用 BOCU 算法,同 |
在美国专利#6,737,994 中,涵盖了通用 BOCU 算法,同时还提到了特定的 BOCU-1 实现。 <ref>{{Cite web|title=United States Patent #6,737,994, "Binary-ordered compression for unicode"|url=http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6737994.PN.&OS=PN/6737994&RS=PN/6737994|access-date=2008-11-16|author=Davis|date=2004-05-18||subscription=etal}}</ref>[[IBM]]当时雇用了 BOCU-1 的两位发明者,在统一碼技术说明中指出“完全兼容的 BOCU-1 版本”的实现者必须联系 IBM 以申请免版税许可。 <ref>{{Cite web|title=UTN #6: BOCU-1|url=https://www.unicode.org/notes/tn6/#Intellectual_Property|access-date=2014-02-05|author=Markus Scherer, [[Mark Davis (Unicode)|Mark Davis]]|date=2006-02-04}}</ref>BOCU-1 是统一碼网站上,目前唯一已知的受到[[知识产权]]限制的统一碼压缩方案。 |
||
相比之下,IBM 也 |
相比之下,IBM 也为UTF-EBCDIC申请专利,但它选择使文档和[[字符编码|编码方案]]不要求对实施者申请许可证,而是“任何将转换格式成为 UCS 标准的一部分,将对他们们免费提供”。 <ref>{{Cite web|title=UTR #16: UTF-EBCDIC|url=https://www.unicode.org/reports/tr16/#Bibliography|access-date=2008-11-16|author=V.S. Umamaheswaran|date=2002-04-16}}</ref> |
||
== 参考 == |
== 参考 == |
||
第94行: | 第94行: | ||
== 另 |
== 另见 == |
||
* [[UTF-1]]包含 UTF-1、 [[UTF-8]]和 BOCU-1 设计的比较 |
* [[UTF-1]]包含 UTF-1、 [[UTF-8]]和 BOCU-1 设计的比较 |
||
第100行: | 第100行: | ||
{{Improve categories|time=2021-11-17T16:19:01+00:00}} |
{{Improve categories|time=2021-11-17T16:19:01+00:00}} |
||
[[Category:Unicode |
[[Category:Unicode转换格式]] |
||
[[Category:数据压缩]] |
[[Category:数据压缩]] |