統一碼標準壓縮方案
統一碼標準壓縮方案[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).