如果 unicode 代码点使用 17 位或更多,则如何计算代理对?
Unicode 代码点是范围从 0x000000 到 0x10FFFF 的标量值。因此它们是 21 位整数,而不是 17 位。
代理对是 UTF-16 形式的一种机制。这将 21 位标量值表示为一个或两个 16 位代码单元。
- 从 0x000000 到 0x00FFFF 的标量值表示为从 0x0000 到 0xFFFF 的单个 16 位代码单元。
- 从 0x00D800 到 0x00DFFF 的标量值不是 Unicode 中的字符,因此它们永远不会出现在 Unicode 字符串中。
- 从 0x010000 到 0x10FFFF 的标量值表示为两个 16 位代码单元。第一个编码单元对标量值的高11位进行编码,作为范围从0xD800-0xDBFF的编码单元。将 0x01-0x10 之间的值编码为四位有点棘手。第二编码单元对标量值的低10位进行编码,作为范围从0xDC00-0xDFFF的编码单元。
Unicode 联盟的常见问题解答中通过示例代码详细解释了这一点,UTF-8、UTF-16、UTF-32 和 BOM。该常见问题解答引用了 Unicode 标准的部分,其中包含更多详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)