以下似乎不正确
"".charCodeAt(0); // returns 55357 in both Firefox and Chrome
那是一个名为 ROCKET (U+1F680) 的 Unicode 字符,十进制应该是 128640。
这是针对正在编写的 unicode 应用程序。似乎大多数但不是来自 unicode 6 的所有字符都停留在 55357。
我该如何解决?谢谢。
以下似乎不正确
"".charCodeAt(0); // returns 55357 in both Firefox and Chrome
那是一个名为 ROCKET (U+1F680) 的 Unicode 字符,十进制应该是 128640。
这是针对正在编写的 unicode 应用程序。似乎大多数但不是来自 unicode 6 的所有字符都停留在 55357。
我该如何解决?谢谢。
JavaScript 使用 UTF-16 编码;详情请看这篇文章:
BMP 之外的字符,例如 U+1D306 用于中心 () 的四元组,只能使用两个 16 位代码单元以 UTF-16 编码:0xD834 0xDF06。这称为代理对。请注意,代理对仅表示单个字符。
代理对的第一个代码单元始终在 0xD800 到 0xDBFF 的范围内,称为高代理或前导代理。
代理对的第二个代码单元始终在 0xDC00 到 0xDFFF 的范围内,称为低代理或跟踪代理。
您可以像这样解码代理对:
codePoint = (text.charCodeAt(0) - 0xD800) * 0x400 + text.charCodeAt(1) - 0xDC00 + 0x10000
完整的代码可以在Mozilla 的 charCodeAt 文档中找到。
试过这个:
> "".charCodeAt(0);
55357
> "".charCodeAt(1);
56960
关于 SO 的相关问题:
您可能也想看看这个:
我认为这是因为他们向您返回了该字符的第一个代码单元 UTF-16 编码。我不确定你能做多少,因为它们返回一个 16 位值——我可能会尝试从前两个代码单元手动解码字符,然后用 UTF-32 编码,这似乎是你想要什么。