Javascript"".charCodeAt(0)卡在55357?

Xah*_*Lee 17 javascript unicode

以下似乎不正确

"".charCodeAt(0);  // returns 55357 in both Firefox and Chrome
Run Code Online (Sandbox Code Playgroud)

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

这是为了写一个unicode应用程序.似乎大多数但不是来自unicode 6的所有字符都停留在55357.

我该怎么解决?谢谢.

Dan*_*iel 10

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
Run Code Online (Sandbox Code Playgroud)

可以在charCodeAtMozilla文档中找到完整的代码.