Javascript конвертировать Var в UTF8 строку

1

Я столкнулся с странной ситуацией, из-за которой я просто не могу понять, откуда я. У меня есть строка, содержащая символы 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, пожалуйста...

  • 0
    и new String((new String("\\u0123")).toString()) не работает, кажется, что-то удерживает этот префикс \ где-то.
Показать ещё 3 комментария
Теги:
ecmascript-6
string
utf-8

1 ответ

3
Лучший ответ

Поскольку эти escape-последовательности являются, поначалу, красными действительными escape-последовательностями JSON, самым простым методом является синтаксический анализ строки как строки JSON:

var x = "\\u0123";
console.log(JSON.parse('"' + x + '"'));
  • 1
    Brilliant! благодарю вас.
  • 0
    Подчеркивание: этот ответ не имеет ничего общего с UTF-8, что имеет смысл, поскольку кажется, что вопрос не имеет ничего общего с UTF-8 (как отмечено в комментарии к вопросу). Экранированные символы, отформатированные как "\ uABCD", предназначены для кодовых блоков UTF-16, что JavaScript и JSON используют в строках.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню