使用“”.charCodeAt()和String.fromCharCode用JS获取一些字符(代码值> 55349)

时间:2013-01-22 16:00:54

标签: javascript

我遇到unicode字符和JS的问题。我有一个书签来帮助我输入奇怪的unicode字符。

我使用"".charCodeAt(pos)获取unicode代码以重现相同的奇怪字符,并使用String.FromChardCode反之。但是,对于具有unicode代码的字符> 55349我有一个问题: http://en.wikipedia.org/wiki/Blackboard_bold

例如,对于Blackboard bold X(120169):

如果我尝试从代码中获取它:

alert(String.fromCharCode(120169));

我获得另一个角色,如果我尝试直接从JS获取代码,那就是同样的事情:

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

结果: 55349 56655

有一种方法可以使用这些字符吗?


1 个答案:

答案 0 :(得分:7)

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

虽然认识到你有这样一个角色可能会相当棘手。

Mathias Bynens撰写了一篇关于此事的博文:JavaScript’s internal character encoding: UCS-2 or UTF-16?。它非常有趣(虽然有时候有点神秘),最后提到了几个支持从UCS-2到UTF-16的转换的代码库,反之亦然。你或许可以在那里找到你需要的东西。