[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кодировки в AJAX
Antihero
Аджакс только начал изучать, так что если вопрос глупый, сорри :)
Проблема заключается в том, что, как я понял, xmlHttpRequest возвращает данные в UTF-8. И в результате если сама страница в стандартной кириллице (windows-1251), и страница, к которой она обращается, тоже, то после запроса на странице вместо нормального русского текста отображаются знаки вопроса. Кодировку в браузере сменить не получается, потому что тогда страница возвращается в начальной положение. Долго эксперементировал, но никак не могу найти решение :( Как все такое обходят?



Спустя 4 минуты, 48 секунд (6.06.2007 - 11:37) vasa_c написал(а):
Не возвращает, а посылает.
И страница в стандартной кириллице лежит в файле на диске, а в браузере она уже в UTF ( http://www.phpforum.ru/index.php?showtopic=2638 ).
Т.о. у тебя приходят данные в win-1251 на страницу в utf-8.
Т.е. тебе нужно перекодировать эти данные на сервере перед отправкой из 1251 в utf.
Цитата
Как все такое обходят?

Лично я это обхожу использованием везде UTF. И проблем не имею.

Спустя 2 часа, 23 минуты, 18 секунд (6.06.2007 - 14:00) kart написал(а):
вот, посмотри темку, у меня тоже такая проблема была... вроде решил, теперь аякс нормально работает )) http://www.phpforum.ru/index.php?showtopic...amp;#entry20649

Спустя 5 часов, 6 минут, 41 секунда (6.06.2007 - 19:07) Antihero написал(а):
Спасиб.
Цитата
у меня тоже такая проблема была... вроде решил

Kart, ты ж её iconv()-ом решил, а он дополнительных библиотек требует. Возможности подключать сторонние расширения нету, к сожалению.

А всю инфу хранить хранить в utf-8 как-то эт.. неудобно немного :) Да и сложным почему-то кажетсо все наработанное перекодировать в юникод. Хотя эт наверное единственный адекватный вариант. Не подскажете тогда уж заодно, как в mysql поля в юникод переводить? "select convert('текст' using utf8)" не хочет чифото работать :( Ошибок не пишет, но и данные выводит в 1251. Руки кривые, или не так делать надо? :)

Спустя 15 часов, 25 минут, 2 секунды (7.06.2007 - 10:32) dron написал(а):
1. Передача кириллицы на сервер в кодировке win-1251. Кодируем этой функцией передаваемые данные:
function escapeEx(str)
{
var ret = '';

for (i=0; i<str.length; i++)
{
var n = str.charCodeAt(i);
if (n >= 0x410 && n <= 0x44F)
n -= 0x350;
else if (n == 0x451)
n = 0xB8;
else if (n == 0x401)
n = 0xA8;
if ((n < 65 || n > 90) && (n < 97 || n > 122) && n < 256)
{
if (n < 16)
ret += '%0'+n.toString(16);
else
ret += '%'+n.toString(16);
}
else
ret += String.fromCharCode(n);
}

return ret;
}


2. Прием данных в кодировке win-1251. Печатаем заголовок с указанием кодировки. На Perl это выглядит так:

print "Content-type: text/html; charset=windows-1251\n\n";

Если что, спрашивайте.
www.mtron.ru - лучшая компьютерная техника для лучших клиентов!

Спустя 32 минуты, 58 секунд (7.06.2007 - 11:05) md5 написал(а):
ещё раз оставишь тут свои ссылки, я включу картинки в ФФ и поудаляю нафик

Спустя 10 часов, 6 минут, 3 секунды (7.06.2007 - 21:11) dron написал(а):
Цитата(md5 @ 7.6.2007, 14:05) [snapback]22134[/snapback]
ещё раз оставишь тут свои ссылки, я включу картинки в ФФ и поудаляю нафик


Сорри за ссылку и за оффтоп, но за исчерпывающий и 100% проверенный ответ такую оплошность допустить можно ;-)

Eще дополню: советую избегать кодировки utf. Сама по себе кодировка отличная, за ней будущее, но когда дело касается AJAX - наша основная задача - сэкономить трафик и время обновления странички. Кодировка utf превращает кирилицу в достаточно объемный код, что может противоречить нашей основной задаче.

Спасибо за внимание!

Спустя 15 минут, 51 секунда (7.06.2007 - 21:27) vasa_c написал(а):
Цитата
советую избегать кодировки utf

Не говори 100-процентного исчерпающего маразма.

По сравнению с загрузкой картинок разница в utf и однобайтных, это пшик. Еще неизвестно что будет дольше, передача лишних десяти байтов или перекодирование на интерпретирующем языке с циклическим перебором символов.

Спустя 2 дня, 15 часов, 51 минута, 57 секунд (10.06.2007 - 13:19) dron написал(а):
1) Если ты хочешь подгружать огромные картинки, то зачем тогда использовать ajax? выгода будет сомнительной.
2) Если бы у всех были 286 компы, то действительно циклический перебор тормозил бы, а в наше время данный вид перекодировки займет тысячные доли секунды.

Спустя 9 минут, 26 секунд (10.06.2007 - 13:28) vasa_c написал(а):
Цитата
Если ты хочешь подгружать огромные картинки, то зачем тогда использовать ajax? выгода будет сомнительной.

Где я об этом говорил?
Цитата
Если бы у всех были 286 компы, то действительно циклический перебор тормозил бы, а в наше время данный вид перекодировки займет тысячные доли секунды.

Так же, как и передача нескольких байтов по сети.

Спустя 6 часов, 59 минут, 49 секунд (10.06.2007 - 20:28) dron написал(а):
Цитата(vasa_c @ 10.6.2007, 16:28) [snapback]22389[/snapback]
Так же, как и передача нескольких байтов по сети.


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

vasa_c, либо отвечай на пост номер 1 либо закрывай тему, ибо ниже будет лишь оффтоп...

Спустя 2 часа, 23 минуты, 48 секунд (10.06.2007 - 22:52) Timok написал(а):
Цитата(dron)
ибо ниже будет лишь оффтоп...
будет, куда ж без него smile.gif

Цитата(dron)
Есть случаи, когда лишние байты становятся критическими, особенно, если у пользователя доступ в инет через обычный модем.
В случае с текстовыми данными (неважно в какой кодировке) это очень сомнительно. Я достаточно долго пользовался модемом и знаю, что примерно 90% времени получения страницы жрёт графика. Из оставшихся процентов, часть уходит на время генерации страницы. Т.о. сама передача текста - это фикня, и при незначительном увеличении всё равно останется фикнёй.

К тому же, AJAX чаще всего предназначен для подгрузки именно небольшого количества информации на страницу, для упрощения отдельных функций (всякие голосование, поиски, работа с формами). Если передаваемая информация значительно превышает размер самой страницы, то стоит вообще задуматься о смысле применения аякса, возможно лучше будет разбить информацию на отдельные страницы.

AJAX расчитан на работу с юникодом, это стандарт и любое отклонение от него - это лишний гемор на попу.

Спустя 19 дней, 22 часа, 15 минут, 22 секунды (30.06.2007 - 21:07) dron написал(а):
Timok, согласен с тобой на 99%
Цитата
К тому же, AJAX чаще всего предназначен для подгрузки именно небольшого количества информации на страницу, для упрощения отдельных функций (всякие голосование, поиски, работа с формами)


Привожу пример из своей практики: делал я чат на ajax. Идея была такой: каждые, допустим 5 секунд подгружать новые сообщения. Изначально у меня это было реализовано на js со скрытым фреймом. Шли годы, человечество изобрело ajax и я решил переписать чат под ajax. Все как положено - подгружается небольшой объем данных - от нескольки байт до нескольки сот байт в хужшем случае. Для комфортной работы чата нужно что бы данный подгружались как можно чаще, допустим раз в 5 сек. Теоретически даже на слабой модемной связи, пусть даже 1 кб/сек задача вполне реализуема, но на практике всё обстоит гораздо хуже. На коннект к серверу уходит немалое время, на закачку уходит какое то время, на обработку поступившей информации уходит время. В итоге 5 сек не всегда было достаточно, пришлось усложнять код тем что анализировалось время цикла обновления и на основе небольшой статистики предыдущих запросов корректировалось время между обновлениями, так же применялась своя система сжатия данных - одним байтом я передавал 2 символа (чат потреблял трафика не больше чем аська). Если работать через ADSL, то никаких проблем не возникает. В то время эта задача была для меня была интересной. В результате удалось довести скорость работы чата при работе через модем с оптимизированным кодом равной скорости, если работать через ADSL без оптимизации кода. ADSL и кабельный инет идет в массы, так что проблем становится меньше.

Спустя 18 минут, 46 секунд (30.06.2007 - 21:26) Angerslave написал(а):
Те, кто каким-то образом избегают UTF видимо ищут мороки себе на зад. В общем случае страничка занимает 8-10 кб кода, ещ1 20-30 кб это всякие js-скрипты, ну и от 5(крайне редко) до 100кб(очень часто) и более - графика. Даже если мы будем кешировать всё, кроме самой странички(что естественно), то объём странички возрастёт аж на 8-10 кб, что при модемной скорости составляет 2 секунды. Но тем, кто юзает модем, можно посоветовать трафиккомпрессор и его аналоги. Из-за сжатия данных, возрастает скорость, да и трафика меньше естся. Так что я абсолютно не вижу причин не переходить на утф, а тем более с него уходить. Первое ещё можно обосновать трудозатратами на небольшую адаптацию php-кода под утф, но второе...

Спустя 33 минуты, 11 секунд (30.06.2007 - 21:59) dron написал(а):
8-10 кб html +20-30кб js считаю извратом, хотя опять же зависит от случая. трафиккомпрессор вещь конечно зашибенная, если версия коммерческая, а так экономия у меня 5% (за полгода работы). По возможности лучше посетителю отдавать сжатую страничку. А проблем с адоптацией кода под утф не вижу. Может в php и есть особенности, в perl всё ок!

Спустя 57 минут, 50 секунд (30.06.2007 - 22:57) Angerslave написал(а):
В пхп все стандартные строковые функции расчитаны на однобайтные кодировки. Под 30кб Js я понимаю какие-либо библиотеки(тот же AJAX + различные обвесы для него). По поводу ТК скажу, что у меня за почти год экономия 3,5 гига, что при нашей стоимости гпрс очень даже ничего. Коэффициент сжатия хттп - 4,2.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.