代理对 (Surrogate Pair)
UTF-16 中使用两个 16 位编码单元表示 BMP 之外字符的机制。
代理对是 UTF-16 编码中用于表示基本多语言平面 (BMP: U+0000 到 U+FFFF) 之外字符的机制。它将一个高代理 (U+D800-U+DBFF) 和一个低代理 (U+DC00-U+DFFF) 组合成两个 16 位编码单元来表示一个字符。
许多表情符号位于 BMP 之外,需要使用代理对。JavaScript 的 String.length 将代理对计为 2,导致包含表情符号的文本报告的字符数高于预期。JavaScript 表情符号处理书籍教授准确的计数方法。
要获得正确的字符数,可使用 [...str].length 或 Array.from(str).length,它们将代理对视为单个字符。
代理对是 UTF-16 特有的概念,在 UTF-8 或 UTF-32 中不存在。字符编码深入书籍解释了代理对的技术细节。