【问题标题】:How to unescape UTF-8 characters in Node (\u00f6)?如何在 Node (\u00f6) 中取消转义 UTF-8 字符?
【发布时间】:2016-10-01 19:24:57
【问题描述】:

我有一个使用 ISO 拉丁文编码但使用特殊字符作为 UTF-8 转义序列的属性文件,例如以下字符串:

Einstellungen l\u00f6schen

我尝试了iconvpunycodeJSON.parse 的一系列不同组合,但它们都没有做我需要的事情,即将这些字符串转换为适用于 JavaScript 的正确 UTF8 格式。不管我怎么做,当我打印它们时,字符串总是有它们的 UTF8 转义序列。

请注意,如果这有什么不同,该文件是一个较长的文件,带有一些换行符等。

如何以打印正确字符的方式读取此文件?

【问题讨论】:

  • 仅供参考,JavaScript \u 转义序列与 UTF-8 无关。该数字是 unicode 代码点[reference]。
  • 你试过console.log("Einstellungen l\u00f6schen") => Einstellungen löschen。 JavaScript 会自动为您进行转换。
  • JSON.parse('"' + str.split('"').join('\\"') + '"')str.replace(/\\u([0-9a-fA-F]{4})/g, (m,cc)=>String.fromCharCode("0x" + cc))
  • 是的,我也注意到了这一点,但无论出于何种原因,当从文件中解析字符串时它不起作用,这让我感到困惑。
  • @Thomas str.replace(/\\u([0-9a-fA-F]{4})/g, (m,cc)=>String.fromCharCode("0x" + cc)) 成功了!随意发布它作为答案,我会尽快接受:)

标签: javascript node.js encoding utf-8


【解决方案1】:

您要么必须将其解析为字符串文字,因此引擎会解析 unicode 代码,因此您必须在通过 JSON.parse() 运行它之前将其用引号括起来。

JSON.parse('"' + str + '"');
//if you use " in your string, you would have to escape it
JSON.parse('"' + str.split('"').join('\\"') + '"');

或者您搜索 unicode-codes 并自行替换它们

str.replace(/\\u([0-9a-fA-F]{4})/g, (m,cc)=>String.fromCharCode("0x"+cc));

【讨论】:

  • 第二个选项是我可能会做的
  • 是的,我选择了第二个选项。
猜你喜欢
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多