Ошибка кодирования и декодирования JavaScript

У меня возникает проблема с кодированием и декодированием Javascript. У меня есть объект json, который содержит строку, закодированную в UTF-8, например 'R\xc3\xa9union'. Чтобы убедиться, что файл Javascript правильно отображает строку, я добавляю атрибут charset к тегу скрипта. Объект json находится в countries.js. Я включаю country.js как <script src="js/countries.js" charset="UTF-8"></script>, но он по-прежнему отображается как Réunion вместо Réunion. Любое предложение?


person Noor    schedule 27.05.2014    source источник
comment
Вы также добавляете кодировку в HTML-документ?   -  person Justinas    schedule 27.05.2014
comment
Да, добавляю: ‹meta http-equiv=Content-Type content=text/html; кодировка=utf-8 /›   -  person Noor    schedule 27.05.2014
comment
Можете ли вы включить JSFiddle? Это может быть проблема, в которой сервер отправляет данные.   -  person Sam P    schedule 27.05.2014
comment
к сожалению, у меня слишком много зависимостей   -  person Noor    schedule 27.05.2014


Ответы (1)


Используйте escape() в сочетании с decodeURIComponent():

decodeURIComponent(escape('R\xc3\xa9union'));

Это должно делать свое дело:

escape('R\xc3\xa9union');           // "R%C3%A9union"
decodeURIComponent("R%C3%A9union"); // "Réunion"

Теперь вы сказали, что не можете сделать это вручную для всех мест, где вам нужны строки из JSON. Я действительно не знаю, как автоматизировать это без повторной сборки JSON с помощью JS, поэтому я бы предложил написать небольшую функцию-оболочку для декодирования на лету:

function dc(str){
    return decodeURIComponent(escape(str));
}

Затем вы можете декодировать необходимые строки с минимальными усилиями:

var myString = dc(myJson["some"]["value"]);

Теперь, что еще может работать, но немного более рискованно: JSON.stringify() весь объект, декодируйте его с помощью двух функций, затем JSON.parse() еще раз.

person Cerbrus    schedule 27.05.2014
comment
это определенно помогает, но я использую строку json во многих местах, я не могу сделать это вручную - person Noor; 27.05.2014
comment
@Noor: Насколько мне известно, нет автоматического способа сообщить JavaScript, как интерпретировать эти строки. Я добавил небольшое предложение о том, как сделать это полуавтоматически. - person Cerbrus; 27.05.2014