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

gia*_*ora 2 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));
Run Code Online (Sandbox Code Playgroud)

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

s="";
alert(s.charCodeAt(0))
alert(s.charCodeAt(1))
Run Code Online (Sandbox Code Playgroud)

结果:55349 56655

有一种方法可以处理这些字符吗?


Mar*_*ijn 7

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

但是,认识到你有这样一个角色可能会相当棘手.

Mathias Bynens撰写了一篇关于此的博文:JavaScript的内部字符编码:UCS-2或UTF-16?.它非常有趣(虽然有时候有点神秘),最后提到了几个支持从UCS-2到UTF-16转换的代码库,反之亦然.您可以在那里找到您需要的东西.

  • +1 您现在也可以在现代浏览器中使用 `s.codePointAt(0)`!https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt (2认同)