Я столкнулся с странной ситуацией, из-за которой я просто не могу понять, откуда я. У меня есть строка, содержащая символы 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"}
Может ли кто-нибудь понять, как преобразовать "х" в символ UTF8, пожалуйста...
Поскольку эти escape-последовательности являются, поначалу, красными действительными escape-последовательностями JSON, самым простым методом является синтаксический анализ строки как строки JSON:
var x = "\\u0123";
console.log(JSON.parse('"' + x + '"'));
new String((new String("\\u0123")).toString())
не работает, кажется, что-то удерживает этот префикс \ где-то.