decodeURIComponent одновременно работает и не работает?

Я просто не могу этого понять, но вот моя ситуация.

У меня есть этот код:

someFunction: function(content){

    content    = content.substr(19005,24);

    console.log('content is: '+content);

    content    = decodeURIComponent(content);

    console.log(typeof content, content);

    var string = '\u0430\u0437\u0443\u0439';

    string     = decodeURIComponent(string);

    console.log(typeof string, string);
}

И когда я запускаю это на моем сервере node.js, он возвращает этот "ненормальный" результат:

content is: \u0430\u0437\u0443\u0439

string \u0430\u0437\u0443\u0439 // but should be "string азуй" as below

string азуй

Итак, как это на самом деле возможно??

1) Тот же контент

2) тот же тип переменной

3) Та же (decodeURIComponent) функция

  • но разные результаты???

PS Единственное отличие я вижу в происхождении content а также string вары. Но играет ли это роль?

1 ответ

Решение

Вторая созданная вами строка не является строкой символов с обратной косой чертой внутри. Скорее, это строка символов Юникода. При создании строки в javascript вы можете использовать обратную косую черту и указать номер символа Юникода. Это учитывает специальные символы, которые находятся за пределами обычных печатаемых клавиш. (Не совсем точно, но вы поняли).

Чтобы заставить это работать, вам нужно сделать это:

var string = '\\u0430\\u0437\\u0443\\u0439';

Этот двойной побег означает, что у вас есть обратная косая черта вместо escape-последовательности.

См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar для получения дополнительной информации.

Изменить: Похоже, вы спрашиваете, как перейти от первой строки к фактическим Unicode символов. Используйте это (ответ взять из Как я декодирую строку с экранированным Unicode?):

var content = content.substr(19005,24);
var r = /\\u([\d\w]{4})/gi;
content = content.replace(r, function (match, grp) {
    return String.fromCharCode(parseInt(grp, 16)); } );
content = unescape(content);
Другие вопросы по тегам