统一码标准压缩方案
统一码标准压缩方案[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).