charCodeAt 和 fromCharCode 不返回相同的字符

Der*_*會功夫 5 javascript char fromcharcode tampermonkey

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

String.fromCharCode("a".charCodeAt(0));    //"a"
Run Code Online (Sandbox Code Playgroud)

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

但是,当我尝试使用此字符时,它会中断:

//"": 55356
String.fromCharCode("".charCodeAt(0));    //"?" (65533)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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

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

xda*_*azz 4

它不会改变。

\n\n
> String.fromCharCode("".charCodeAt(0)).charCodeAt(0)\n  55356\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以通过以下方式检查所有内容:

\n\n
for (var i = 0; i <= 65535; i++) {\n   if (String.fromCharCode(i).charCodeAt(0) !== i) {\n       console.log(\'error\', i, String.fromCharCode(i)); \n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您看到的原因\xef\xbf\xbd是因为\xef\xbf\xbd(65533)\n用于替换其值未知或无法在 unicode 中表示的字符。

\n\n

它被称为替换字符

\n