Да, да, я знаю, что в наш век все уже давно перешли на использование utf-8 при построении веб-сайтов, но остались еще и такие, которые пользуються “допотопными”, “отстойными”, и вообще “не-тру” кодировками типа CP1251 (также известной как Windows-1251), KOI8-R и прочих.
Ни для кого ни секрет, что кодировкой получаемых через Ajax данных по-умолчанию принимается UTF-8. Не все знают, что это умолчание можно изменить, указав кодировку явно через заголовок “Content-Type: text/html; charset=cp1251″. Сегодня вот столкнулся с интересным багом, на который убил довольно много времени.
Сервер отдает некоторый текст по запросу (ajax) в кодировке CP1251, предварительно установив соответствующий заголовок - “Content-Type: text/html; charset=cp1251″. На клиенте использовалась библиотека jQuery:
$('#books').load('books.php', {action: 'list'});
Всё работало замечательно… До тех пор, пока я не открыл страничку в IE7. Как ни странно, но ничего не загрузилось. После длительных раздумий, установки alert-ов куда нужно, и куда нет код был заменен следующим кодом:
$.ajax({
method: 'get',
url: 'books.php',
success: function(data) {
$('#books').html(data);
},
error: function(xhr, textStatus, errorThrown) {
alert(textStatus);
},
data: {action: 'list'}
});
В FF всё продолжало работать, а вот IE начал выдавать странную надпись “parsererror”. Гугление никаких результатов не дало - ни одного похожего случая… После, примерно, 10 минут попыток “запустить” страничку в IE, что-то меня дернуло посмотреть на серверный код. Глаза сразу упали на строку установки Content-Type-а. Недолго думая, я поставил charset=utf-8, и, о чудо, IE загрузил всё как положено (правда в неправильной кодировке, но всё же - уже плюс). Догадавшись в чем может быть дело, я установил кодировку в “windows-1251″, после чего всё заработало на ура.
Собственно, мораль сей басни такова - юзайте, люди, юникод, и будет вам счастье.





November 28th, 2008 at 11:34
Юзаем, ага :)
December 2nd, 2008 at 12:15
Ага, уникод рулит :)