統一碼二進制有序壓縮

求聞百科,共筆求聞

統一碼二進制有序壓縮(英語: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 編碼之間轉換的庫