【问题标题】:Unescape an escaped string in JavaScript在 JavaScript 中取消转义转义字符串
【发布时间】:2015-05-31 03:40:07
【问题描述】:

我正在运行一个循环来显示特定 Unicode 转义序列的字符。

var es = '';

for (var i = 0; i <= 9999; i++) {
  if (i < 10) {
    es = '\\u000' + i;
  } else if (i < 100) {
    es = '\\u00' + i;
  } else {
    es = '\\u' + i;
  }
  console.log(es);
}

...但是,它不显示字符,只显示序列。无论如何,JavaScript 中是否有取消转义序列以强制它显示字符?

【问题讨论】:

标签: javascript unicode


【解决方案1】:

为此,您需要使用String.fromCharCode()

var es = '';
for (var i = 0; i < 9999; ++i) {
  es = String.fromCharCode(i);
  // ...
}

\uNNNN 语法仅适用于较大字符串常量内的常量值。

edit — 下面的重要评论指出,由于 JavaScript 字符串的 UTF-16 实现存在问题,.fromCharCode() 在基本多语言平面之外的字符存在问题。为此,ES6 (ES2015) 具有 String.fromCodePoint(),这是一个类似的函数,确实处理 16 位范围之外的“星光”字符。 More on that here 和评论中的链接。

【讨论】:

  • 有趣的快速问题。为什么 fromCharCode('\u2665') 返回一个空字符串,而如果我只是控制台记录我得到的序列♥
  • fromCharCode() 函数期望它的参数是一个数字。当它试图将'\u2665' 转换为数字时,它会得到NaN,所以你会得到一个空字符串。请改用String.fromCharCode(parseInt("2665", 16))
  • 如何处理 \uabc1 等值
  • @arniekoz String.fromCharCode(parseInt("abc1", 16))
  • 其实你想要String.fromCodePoint,这(不像String.fromCharCodehandles astral characters correctly
【解决方案2】:

对于任何偶然发现这个问题的人(很可能是我未来的自己)想要“逃脱”以前逃脱的Javascript special characters,这里有一个很老套的方法:

newString = JSON.stringify(string).slice(1,-1)

但这似乎只适用于某些字符,例如\t\n\r\f\b\\ 等。

为了更好地解释我自己,在制表符的情况下,这会将制表符字符转换回文字/原始字符串,即\t

【讨论】:

【解决方案3】:

我遇到了来自 REST 端点的 JSON 响应的类似问题,这解决了它:

JSON.parse('"' + string + '"')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多