Surrogate Pair
代理对是 UTF-16 中用两个 16 位码单元表示一个补充平面码点(U+10000 至 U+10FFFF)的机制。
用途
使 UTF-16 能用 16 位码单元覆盖超过 BMP 的全部 Unicode 码点,同时保留 BMP 字符的 1 单元效率。
机制
补充码点 C 减去 0x10000 得到 0-0xFFFFF 的 20 位值,高 10 位加 0xD800 得高代理(0xD800-0xDBFF),低 10 位加 0xDC00 得低代理(0xDC00-0xDFFF)。解码时反向计算。
用例
- Emoji 字符串处理(如 😀 = U+1F600)
- JavaScript 字符串长度与迭代
- Windows API 宽字符处理
- 古文字与罕见字符渲染
示例
- 输入
😀输出\uD83D\uDE00High surrogate D83D plus low surrogate DE00
常见错误
- Splitting a surrogate pair by truncating mid-pair, creating lone surrogates
- Iterate code points with for...of or Array.from
相关词条
UTF-16
UTF-16 是 Unicode 的变长编码形式,使用 2 或 4 字节表示一个码点,BMP 字符用 1 个 16 位码单元,补充平面字符用代理对(2 个码单元)。 词汇表
Unicode
Unicode 是国际字符编码标准,为世界上几乎所有书写系统的每个字符分配唯一码点(U+0000 至 U+10FFFF),共 1,114,112 个码点空间。 词汇表
Code Point
码点是 Unicode 标准中为每个字符分配的数值(U+0000 至 U+10FFFF),是字符在码空间中的位置编号。 词汇表
BOM
BOM(字节顺序标记)是 Unicode 字符 U+FEFF,置于文本流开头用于指示编码形式与字节序。 词汇表