理论上,无论输入是什么,输出都应保持不变:
String.fromCharCode("a".charCodeAt(0)); //"a"
这是有道理的,因为我只是想获取角色的字符代码,然后将其转换回角色。
然而,当我尝试使用这个角色时,它会破坏:
//"": 55356
String.fromCharCode("".charCodeAt(0)); //"�" (65533)
(请注意,我实际上突出显示了该字符串并将其粘贴到下一行。由于某种原因,它自行更改为�
。)
为什么会发生这种情况?我该如何解决这个问题?
我注意到ES6中有一种新方法,String.fromCodePoint()
但除了Firefox之外,每个浏览器都不支持。
答案 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 。