【问题标题】:Javascript convert Var to UTF8 stringJavascript 将 Var 转换为 UTF8 字符串
【发布时间】:2017-10-25 14:29:54
【问题描述】:

我遇到了一个奇怪的情况,我似乎无法摆脱。 我有一个包含 UTF8 字符(转义)的字符串。我已经尝试了 decodeURIComponent(escape(str)) 以及其他一些建议的修复,但还没有成功。

我编写了这个函数来获取字符串,找到转义字符,并用直接的 UTF8 替换它们。

var unescapeUTF8 = function(str) {
    var matches = str.match(/\\u.{4}/g);
    if (matches == null) return str;
    for (var item of matches)
    {
        // testing
        console.log(new String(item));
    }
    ....
    ....
    ....
};

通过测试,我知道如果我去new String("\u0123"),我会得到一个字符串对象String {0: "ģ", length: 1, [[PrimitiveValue]]: "ģ"}

似乎无论我对上面函数中的字符串做什么,我都无法将其从转义的\u0123 转换为ģ

我已经通过打开开发者工具并运行以下命令在浏览器中“创建”了问题

var x = "\\u0123";
console.log(x); // == "\u0123"
new String(x); // == String {0: "\", 1: "u", 2: "1", 3: "3", 4: "2", 5: "4", length: 6, [[PrimitiveValue]]: "\u1324"}

有谁能知道如何将“x”转换为 UTF8 字符...

【问题讨论】:

  • new String((new String("\\u0123")).toString()) 不起作用,它似乎以某种方式保留了前缀 \。
  • new String("\u0123") 是错误的线索,因为字符串已经是字符 new String("\u0123") == "\u0123"true
  • \u.... 不是“UTF-8 编码字符”,而是 Unicode 转义序列。您无法仅通过查看字符串来判断字符串是用 UTF-8 编码还是其他编码。但是,您可以看出字符串中的字符代表某种转义格式。
  • 重新阅读问题new String("\\u0123") == ģfalsenew String("\u0123") == 'ģ'true。但是再次... var x = "\\u0123"; new String(x) == '\u0123'false

标签: javascript string utf-8 ecmascript-6


【解决方案1】:

由于这些转义序列乍一看是有效的 JSON 转义序列,因此最简单的方法是将字符串解析为 JSON 字符串:

var x = "\\u0123";
console.log(JSON.parse('"' + x + '"'));

【讨论】:

  • 强调:这个答案与 UTF-8 无关,这是有道理的,因为该问题似乎与 UTF-8 无关(如对该问题的评论中所观察到的)。格式为“\uABCD”的转义用于 UTF-16 代码单元,这是 JavaScript 和 JSON 在字符串中使用的。
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2015-09-04
  • 2020-10-11
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多