3

"".charCodeAt(pos)用来获取一个奇怪字符的 Unicode 编号,然后String.fromCharCode反过来。

但是我遇到了 Unicode 编号大于 55349 的字符的问题。例如,Blackboard Bold 字符。如果我想要 Unicode 编号为 120169 的小写黑板粗体 X ( ),如果我从 JavaScript 警告代码:

alert(String.fromCharCode(120169));

我得到另一个角色。如果我直接在 JavaScript 中记录一个 Unicode 编号为 120143的大写黑板粗体 X ( ),也会发生同样的事情:

s="";
alert(s.charCodeAt(0))
alert(s.charCodeAt(1))

输出:

55349
56655

有没有办法处理这些字符?

4

1 回答 1

7

在内部,Javascript 以类似于 UCS2 和 UTF-16 的 16 位编码存储字符串。(我说相似,因为这两者都不是)。它们是 16 位的事实意味着BMP之外的字符(代码点高于 65535)将被分成两个不同的字符。如果您将两个不同的字符分开存储,然后再将它们重新组合,您应该可以毫无问题地获得原始字符。

不过,认识到你有这样一个角色可能相当棘手。

Mathias Bynens 曾就此写过一篇博文:JavaScript 的内部字符编码:UCS-2 还是 UTF-16?. 它非常有趣(尽管有时有点神秘),并以对支持从 UCS-2 到 UTF-16 的转换的代码库的几个引用结束,反之亦然。你也许可以在那里找到你需要的东西。

于 2013-01-22T16:08:30.153 回答