charCodeAt和fromCharCode不返回相同的字符

时间:2014-03-12 06:58:08

标签: javascript char tampermonkey fromcharcode

理论上,无论输入是什么,输出都应保持不变:

String.fromCharCode("a".charCodeAt(0));    //"a"

这是有道理的,因为我只是想获取角色的字符代码,然后将其转换回角色。

然而,当我尝试使用这个角色时,它会破坏:

//"": 55356
String.fromCharCode("".charCodeAt(0));    //"�" (65533)

enter image description here

(请注意,我实际上突出显示了该字符串并将其粘贴到下一行。由于某种原因,它自行更改为。)

为什么会发生这种情况?我该如何解决这个问题?

我注意到ES6中有一种新方法,String.fromCodePoint()但除了Firefox之外,每个浏览器都不支持。

1 个答案:

答案 0 :(得分:4)

它没有改变。

> String.fromCharCode("".charCodeAt(0)).charCodeAt(0)
  55356

你可以通过以下方式查看所有内容:

for (var i = 0; i <= 65535; i++) {
   if (String.fromCharCode(i).charCodeAt(0) !== i) {
       console.log('error', i, String.fromCharCode(i)); 
   }
}

为什么您看到是因为(65533) 用于替换unicode中值未知或不可表示的字符。

它被称为 REPLACEMENT CHARACTER