【发布时间】: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") == ģ是false但new String("\u0123") == 'ģ'是true。但是再次...var x = "\\u0123"; new String(x) == '\u0123'是false
标签: javascript string utf-8 ecmascript-6