統一碼標準壓縮方案
統一碼標準壓縮方案[1](英語:Standard Compression Scheme for Unicode,縮寫:SCSU)[2],是一種統一碼技術標準。用於減少統一碼文本所需使用的字節數,尤其是該文本中所使用的字符,主要集中在一種或幾種語言區段。它的作法主要是將 128– 255 範圍內的值,動態映射到 以 128 個字符為單位的特定區段的偏移量來實現。編碼器的初始條件則是ASCII和ISO-8859-1中不包含除 NULL TAB CR 和 LF 之外的 C0 控制代碼的現有字符串可以被視為 SCSU 字符串。
由於大多數字母在統一碼所使用的碼位,通常會是區塊中的連續位置,所以如果文本使用小寫字母、 ASCII 標點符號或窗口內的其它標點符號,可以按每個字符一個字節進行編碼(需另外加上前置成本,對常見語言通常只有 1 個字節),大多數其他標點符號可以通過非鎖定移位的方式,以每個字符使用 2 個位元組進行編碼。統一碼標準壓縮方案還可以在內部切換到UTF-16模式,以處理非字母語言。
歷史和使用
[編輯]最初,是由路透社開發了 SCSU,並以此命名為「統一碼的路透社壓縮方案」(英語:Reuters Compression Scheme for Unicode,RSCU)。 [4] [5] [6] [7]
起初統一碼聯盟認為它是一種字符編碼, [8]在 1999 年則改變了看法:雖然它仍然被認為是一種傳輸用途編碼語法,但有一段時間它不再被認為是一種字符編碼,這是因為對同一份文件,不同的壓縮器可能會產生不同的輸出。 [9]然而,在 2004 年,該決定被撤銷,現在 SCSU 被認為是一種壓縮字符編碼方案,而不是簡單或複合字符編碼方案。 [10]
Roman Czyborra(GNU Unifont)編寫了一個解壓器。 [11] IBM 相關的解壓縮器可以在國際統一碼部件中找到,還有一個用 Java 編寫的壓縮器。 [12]更簡單的參考編解碼器可作為 TR6 的附件提供。
Symbian OS是一種用於手機和其他流動裝置的作業系統,它使用此壓縮方案來將字符串序列化。
SQL Server 2008 R2使用 SCSU,其壓縮針對的對象則是存儲在nchar(n)和nvarchar(n)列中的統一碼值(即以UCS-2編碼的字符串),其節省的空間達到了 15% 到 50% (而UTF-8只能對統一碼中的ASCII子集減少 50%),具體取決於資料的語言。 [13]
方案
[編輯]以下部分簡要描述了壓縮 SCSU 流的解剖結構。有關完整說明(與解壓縮器的說明相匹配),請參閱 UTS #6 文檔。
編碼方式
[編輯]SCSU 以單字節模式啟動,該模式使用壓縮的窗口編碼。使用一些指令用來轉換到UTF-16BE「統一碼」模式以及從該模式切換到單字節模式的命令。
窗口編碼
[編輯]SCSU 的核心在於使用一些窗口來定義了字節 0x80-0xff 的意義。有八個靜態窗口用於簡單文字和標點符號,以及六個動態窗口(加上「半 Unicode 區段」窗口和用於補充平面的自定義窗口)用於使用更多字符。
簡單和動態窗口都是通過特殊命令字符選擇的。對於不適合當前塊的單個字符,提供用於引用的命令字符。
與通用純文本壓縮方案的比較
[編輯]由於 UTF-16 或 UTF-8 文本可能比在 Unicode 之前的編碼中佔用的空間更多,因此人們可能希望使用壓縮(例如 SCSU)來緩解這一問題。 [14]與通用壓縮機相比,使用 SCSU 不一定有優勢。 [7]此外,雖然它可以用作文本編碼,但由於算法的狀態性質,將其用作內部文本表示時可能會出現困難,因為基本文本操作變得非常重要。
純粹作為一種壓縮算法處理,在處理超過幾 K 的文本,SCSU 不如最常用的通用算法來處理。
在某些情況下,標準壓縮方案確實是有優勢的。對於那些較短(使用的字符量不多)的文本,它可以有效壓縮文本,而大多數的全尺寸壓縮器,它們本身的開銷通常需要額外耗費數百位元組。在Symbian OS中,甚至將此標準壓縮方案用於剪貼板操作,例如剪切、複製和粘貼小字符串文本。
在 HTML 中
[編輯]W3C [15] [16]和WHATWG [17] HTML 標準中,禁止在文檔中支持統一碼標準壓縮方案,這是因為 HTML 的設計沒有考慮到非 ASCII 兼容的編碼。此外,已證明可以藉由瀏覽器對此類編碼處理不當而導致的跨網站腳本漏洞。 [18]
另見
[編輯]- 統一碼二進制有序壓縮
- 國際統一碼部件 可以在 SCSU 和其他統一碼編碼之間進行轉換的庫
參考資料
[編輯]- ^ About Unicode Terminology. unicode.org. [2021-12-10]. (原始內容存檔於2021-04-21).
- ^ UTS #6: Compression Scheme for Unicode. 2005-05-06 [2008-06-13]. (原始內容存檔於2022-01-20).
SCSU defines a compact encoding, which is sometimes useful. However, Unicode text is much more commonly stored and transmitted in UTF-8 which is less compact (except for ASCII), much simpler, and does not present any security issues. For longer texts, general-purpose compression is effective and common.
- ^ IANA 的 SCSU 註冊記錄. [2021-11-17]. (原始內容存檔於2021-12-08).
- ^ Ninth International Unicode Conference - Friday - Track B. [2021-11-16]. (原始內容存檔於2021-05-16).
- ^ Tenth International Unicode Conference - Conference Program. [2021-11-16]. (原始內容存檔於2021-11-16).
- ^ Compression Scheme for Unicode. [2021-11-16]. (原始內容存檔於2021-11-16).
- ^ 7.0 7.1 A survey of Unicode compression. [2021-11-16]. 原始內容存檔於2019-05-08.
- ^ UTR#17: Character Encoding Model. [2021-11-16]. (原始內容存檔於2021-11-16).
- ^ https://unicode.org/reports/tr17/tr17-3.html#Transfer (頁面存檔備份,存於互聯網檔案館) Encoding Syntax
- ^ UTR#17: Character Encoding Model. [2021-11-16]. (原始內容存檔於2022-01-24).
- ^ 存档副本. [2021-11-16]. (原始內容存檔於2021-05-17).
- ^ International Components for Unicode. 22 October 2021 [2021-11-16]. (原始內容存檔於2021-11-16).
- ^ Unicode Compression Implementation (SQL Server 2008 R2 Books Online). [2008-08-18]. (原始內容存檔於2021-11-16).
- ^ 存档副本 (PDF). [2021-11-16]. (原始內容存檔 (PDF)於2022-01-19).
- ^ 8.2.2.3. Character encodings. HTML 5.1 Standard. W3C. [2021-11-16]. (原始內容存檔於2021-07-18).
- ^ 8.2.2.3. Character encodings. HTML 5 Standard. W3C. [2021-11-16]. (原始內容存檔於2019-07-03).
- ^ 12.2.3.3 Character encodings. HTML Living Standard. WHATWG. [2021-11-16]. (原始內容存檔於2022-01-07).
- ^ <meta> - HTML. MDN Web Docs. Mozilla. (原始內容存檔於3 October 2018).