以下似乎不正确
"".charCodeAt(0); // returns 55357 in both Firefox and Chrome
这是一个名为ROCKET(U + 1F680)的Unicode字符,小数应为128640。
这是针对unicode app写的。似乎大多数但不是来自unicode 6的所有字符都停留在55357。
我该如何解决?感谢。
答案 0 :(得分:10)
JavaScript正在使用UTF-16编码;有关详细信息,请参阅this article:
BMP以外的字符,例如中心()的U + 1D306四分之一,只能使用两个16位代码单元以UTF-16编码:0xD834 0xDF06。这被称为代理对。请注意代理对 只代表一个字符。
代理对的第一个代码单元始终位于 0xD800到0xDBFF,称为高代理或主代理。
代理对的第二个代码单元始终位于 0xDC00到0xDFFF,称为低代理或跟踪代理。
您可以像这样解码代理对:
codePoint = (text.charCodeAt(0) - 0xD800) * 0x400 + text.charCodeAt(1) - 0xDC00 + 0x10000
可以在Mozilla documentation for charCodeAt找到完整的代码。
答案 1 :(得分:5)
试过这个:
> "".charCodeAt(0);
55357
> "".charCodeAt(1);
56960
关于SO的相关问题:
你可能也想看看这个:
答案 2 :(得分:0)
我认为这是因为他们正在为您返回该角色的第一个代码单元UTF-16编码。我不确定你能做多少,因为它们返回一个16位值 - 我可能会尝试从前两个代码单元手动解码字符,然后用UTF-32编码,这似乎是你想要什么。