在UTF-16中,使用surrogate pair in表示BMP之外的字符,第一个代码单元位于0xD800-0xDBFF之间,第二个代码单元位于0xDC00-0xDFFF之间。每个CU代表10位代码点。 BMP中的字符保持原样。
现在同步很容易。鉴于任意代码单元的位置:
自我同步的关键是要知道我们是否立即处于某事的中间而不必从开始检查中再次阅读。 UTF-16允许我们这样做
由于高代理,低代理和有效BMP字符的范围是disjoint,因此代理不可能匹配BMP字符,或者两个相邻字符的(部分)看起来像合法的代理对。这大大简化了搜索。这也意味着UTF-16在16位字上进行自同步:是否可以在不检查早期代码单元的情况下确定代码单元是否启动字符。 UTF-8具有这些优点,但许多早期的多字节编码方案(例如Shift JIS和其他亚洲多字节编码)不允许明确的搜索,只能通过从字符串的开头重新解析来同步(UTF-如果一个字节丢失或者遍历以随机字节开始,则16不是自同步的。