【问题标题】:charCodeAt and fromCharCode do not return the same charactercharCodeAt 和 fromCharCode 不返回相同的字符
【发布时间】:2014-03-12 06:58:08
【问题描述】:

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

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

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

但是当我尝试使用这个角色时,它会中断:

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

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

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

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

【问题讨论】:

  • @user1281385 - 哇,这是用 Java 写的,不是 JavaScript。
  • 对不起,当你评论时我试图删除
  • 可能是一个更好的链接stackoverflow.com/questions/5446492/…
  • 试试控制台String.fromCharCode("????".charCodeAt(0)).charCodeAt(0) -> jsfiddle.net/9bLxB
  • 不过,console.log("????".charCodeAt(0), String.fromCharCode("????".charCodeAt(0)).charCodeAt(0)); 给出了 55356 55356 jsfiddle.net/9bLxB/1 那么问题出在哪里,它并没有中断?

标签: javascript char tampermonkey fromcharcode


【解决方案1】:

它不会改变。

> 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 2017-02-20
    • 2016-09-25
    • 2016-01-08
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多