【发布时间】:2020-02-20 15:59:07
【问题描述】:
我正在尝试将 Unicode 字符转换为 UTF-16 代理对:
角色“带着医用口罩的脸”???是代码点U+1F637。
二进制是:1 1111 0110 0011 0111。
根据Wikipedia 将其编码为 UTF-16 我需要执行以下操作:
-
从代码点中减去 0x10000
11111011000110111 - 10000 = 011111011000100111 -
高十位(在 0x000–0x3FF 范围内)被添加到 0xD800 以给出第一个 16 位代码单元或高代理 (W1)
0001111101 + 1101100000000000 = 01101100001111101 (D87D) -
将低十位(也在 0x000–0x3FF 范围内)添加到 0xDC00 以提供第二个 16 位代码单元或低代理 (W2),其范围为 0xDC00–0xDFFF。
1000100111 + 1101110000000000 = 01101111000100111 (DE27)
所以我有两个代码单元D87D 和DE27,但我知道正确的结果是:
console.log('\uD83D\uDE37')
我做错了什么?
【问题讨论】: