Я столкнулся со следующей проблемой: библиотека 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))
, но он тоже не работал