Кодирование ада!AJAX-запрос JSON (utf-8) для символов латинского алфавита в верхнем регистре - PullRequest
2 голосов
/ 10 ноября 2011

Я столкнулся со следующей проблемой: библиотека JavaScript, над которой я работаю, использует междоменные запросы JSON для получения данных из бэкэнда Ruby on Rails:

function getData()
{
    $.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")} })

    $.ajax({ 
                url: backend_server + '?callback=parseData&op=516',
        contentType: "application/json; charset=utf-8",
        dataType: 'jsonp',
        success: function (xml) {
           //console.log('success');
        }
    });
}

База данных, из которой RoR получает данные, использует latin1 внутренне, но, если память работает правильно, JSON-запросы такого типа могут выполняться только с использованием UTF-8.

Заголовок веб-страницы гласит:

Content-Type    text/html; charset=ISO-8859-1

И метатег страницы также ISO-8859-1:

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>

Теперь, после получения данных из запроса, моя библиотека Javascript будет анализировать их и, в конце концов, добавлять их к определенному элементу div внутри страницы (используя последнюю версию JQuery, а не то, что это имеет значение). Все латинские символы отображались некорректно.

Я заметил, что разные браузеры интерпретировали эти символы по-разному (для одних это работало нормально, для других ... не так уж и много). Я закончил вносить небольшое изменение в функцию utf8_decode, которую нашел здесь (обнаружение пользовательского агента и полное пропускание обработки для Safari, IE и Opera), но в итоге я все еще не могу отобразить специальные латинские заглавные буквы с такими как «É», «Ç», «À», «Á», «Â» или «Ã».

Есть идеи? Я довольно заблудился и мог бы использовать некоторые советы. Заранее спасибо, J.

PS: верхний комментарий на сайте функции тоже мой.

Edit1: я также пытался использовать unescape(encodeURIComponent(str_data)), но он тоже не работал

1 Ответ

4 голосов
/ 10 ноября 2011

Если страница латинская, а сервер использует латинский, почему вы хотите, чтобы json был utf-8. JSON не обязательно должен быть utf-8!

Попробуйте удалить utf-8 из параметра contentType в приведенном выше коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...