Javascript“”。charCodeAt(0)卡在55357?

时间:2013-03-03 02:27:57

标签: javascript unicode

以下似乎不正确

"".charCodeAt(0);  // returns 55357 in both Firefox and Chrome

这是一个名为ROCKET(U + 1F680)的Unicode字符,小数应为128640。

这是针对unicode app写的。似乎大多数但不是来自unicode 6的所有字符都停留在55357。

我该如何解决?感谢。

3 个答案:

答案 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编码,这似乎是你想要什么。