1. 引言 (Introduction)
ISO/IEC 10646 [ISO.10646] 定义了一个称为通用字符集 (Universal Character Set, UCS) 的大型字符集, 涵盖了世界上大多数书写系统. Unicode 标准 [UNICODE] 定义了同一组字符, 并进一步定义了附加字符属性以及实现者高度关注的其他应用细节. 到目前为止, Unicode 的变更以及 ISO/IEC 10646 的修订和增补一直相互跟进, 因此字符集清单和码位分配保持同步. 相关标准化委员会已经承诺维持这种非常有用的同步关系.
编码形式 (Encoding Forms)
ISO/IEC 10646 和 Unicode 为其共同字符清单定义了若干编码形式 (encoding forms):
- UTF-8
- UCS-2
- UTF-16
- UCS-4
- UTF-32
在一种编码形式中, 每个字符由一个或多个编码单元 (encoding units) 表示. 除 UTF-8 以外, 所有标准 UCS 编码形式的编码单元都大于一个八位组 (octet), 因而很难用于许多当前假定字符为 8 位甚至 7 位的应用和协议.
UTF-8 的特性 (Characteristics of UTF-8)
UTF-8 是本文档的主题, 它的编码单元为一个八位组. 它使用八位组的所有位, 但仍具有完整保留 US-ASCII [US-ASCII] 范围的性质:
- US-ASCII 字符编码为一个八位组, 其值为通常的 US-ASCII 值
- 任何具有此类值的八位组只能表示一个 US-ASCII 字符, 不能表示其他内容
UTF-8 编码属性 (UTF-8 Encoding Properties)
UTF-8 使用可变数量的八位组来编码 UCS 字符. 八位组数量以及每个八位组的值取决于 ISO/IEC 10646 中分配给该字符的整数值, 即字符编号 (character number), 也称为代码位置 (code position), 码位 (code point) 或 Unicode 标量值 (Unicode scalar value).
这种编码形式具有以下特性 (所有值均为十六进制):
✅ ASCII 兼容性 (ASCII Compatibility)
从 U+0000 到 U+007F 的字符编号 (US-ASCII 字符清单) 对应八位组 00 到 7F (7 位 US-ASCII 值). 一个直接结果是, 普通 ASCII 字符串同时也是有效的 UTF-8 字符串.
✅ 不会混淆 ASCII (No ASCII Confusion)
US-ASCII 八位组值不会以其他方式出现在 UTF-8 编码字符流中. 这使 UTF-8 能够兼容那些基于 US-ASCII 值进行解析, 但对其他值保持透明的文件系统或其他软件, 例如 C 库中的 printf() 函数.
✅ 易于转换 (Easy Conversion)
UTF-8 与其他编码形式之间易于进行往返转换.
✅ 序列长度指示 (Sequence Length Indication)
多八位组序列的第一个八位组指示该序列中的八位组数量.
✅ 受限字节值 (Restricted Byte Values)
八位组值 C0, C1, F5 到 FF 永远不会出现.
✅ 字符边界识别 (Character Boundary Recognition)
从八位组流中的任意位置都可以容易地找到字符边界.
✅ 排序保持 (Sorting Preservation)
UTF-8 字符串按字节值进行字典序排序的顺序, 与按字符编号排序时相同. 当然, 这一点的实际意义有限, 因为基于字符编号的排序顺序几乎从不符合文化习惯.
✅ 快速搜索算法 (Fast Search Algorithms)
Boyer-Moore 快速搜索算法可用于 UTF-8 数据.
✅ 可识别性 (Recognizability)
可以用简单算法相当可靠地识别 UTF-8 字符串. 也就是说, 其他任意编码中的字符串看起来像有效 UTF-8 的概率很低, 并且会随着字符串长度增加而降低.
UTF-8 的历史 (History of UTF-8)
UTF-8 由 Ken Thompson 于 1992 年 9 月设计, 其设计遵循 Rob Pike 指定的设计准则, 目标是定义一种可在 Plan9 操作系统中以非破坏性方式使用的 UCS 转换格式. Thompson 的设计由 X/Open Joint Internationalization Group XOJIG 推动完成标准化 (见 [FSS_UTF]), 在此过程中曾使用 FSS-UTF (变体 FSS/UTF), UTF-2, 最终使用 UTF-8 这些名称.