【问题标题】:Using charCodeAt() and fromCharCode to obtain Unicode characters (code value > 55349) with JS用JS使用charCodeAt()和fromCharCode获取Unicode字符(码值>55349)
【发布时间】:2013-01-22 16:00:54
【问题描述】:

我使用"".charCodeAt(pos) 获取奇怪字符的Unicode 编号,然后使用String.fromCharCode 获取相反的字符。

但是我遇到了 Unicode 编号大于 55349 的字符的问题。例如,Blackboard Bold characters. 如果我想要小写黑板粗体 X (????),它的 Unicode 编号为 120169,如果我通过 JavaScript 提醒代码:

alert(String.fromCharCode(120169));

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

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

输出:

55349
56655

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

不过,要识别出你有这样一个角色可能相当棘手。

Mathias Bynens 写了一篇关于此的博文:JavaScript’s internal character encoding: UCS-2 or UTF-16?。它非常有趣(尽管有时有点神秘),并以对支持从 UCS-2 到 UTF-16 转换的代码库的几个引用结束,反之亦然。你也许可以在那里找到你需要的东西。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多