我遇到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
有一种方法可以使用这些字符吗?
答案 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的转换的代码库,反之亦然。你或许可以在那里找到你需要的东西。