統一碼二進制有序壓縮:修订间差异

求闻百科,共笔求闻
添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移])
 
(机器人:清理不当的来源、移除无用的模板参数)
 

(未显示1个用户的2个中间版本)

第1行: 第1行:
'''一碼二制有序壓縮'''({{Lang-en|Binary Ordered Compression for Unicode}},縮寫:'''BOCU''') 是一碼技注解文件所定規範<ref name=":0" />,可以兼容[[多用途互聯網郵展|MIME]]的一碼压缩方案。
'''一碼二制有序压缩'''({{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>
然[[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 的註冊記錄]</ref>。
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> ),則計算其前一字符的一化版本的碼值差值,並對此差值碼。
压缩法的规则为,<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>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>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>例外,所有 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来说,可能影响整个文档。
除了空格<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 亦提供了类似的健性,带有特殊的重置代码<code>0xFF</code> 。当解码器找到这个八位字节时,它会将其状态重置为<code>U+0040</code>就像行尾一样。 BOCU-1 规范中不推荐使用<code>0xFF</code>复位字节,因为它与其他 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 规范不推荐这种做法。
在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]]可以原始[[通用字符集|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>不受''保护'',可以作为尾字节出现。
理论上,[[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 算法,同还提到了特定的 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|authorlink=Mark Davis (Unicode)|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 是一碼网站上,目前唯一已知的受到[[知识产权]]限制的一碼压缩方案。
在美国专利#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 也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>
相比之下,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:数据压缩]]