Непонятный баг с AJAX в IE8

В процессе переезда одного из наших проектов на новый сервер, Интернет Эксплорер восьмой версии стал выдавать какие-то невнятные ошибки при использования AJAX. К решению проблемы подключили меня, так как сообщение об ошибке совершенно не давало ключа к её исправлению: Ошибка в IE (3.55КиБ) В этом месте в коде не было ничего криминального, создание объекта для «аякса», асинхронная посылка запроса и проверка свойств того что пришло. Методом проб и ошибок удалось выяснить, что ошибка возникает при попытке обращения к свойствам «status» и «responseText» (а так же «responseXML», в коде он не использовался, но я просто попробовал).

Промучавшись с полчаса, я догадался переключить IE на работу с объектом ActiveX Microsoft.XMLHTTP, вместо XMLHttpRequest, у первого диагностика получше — ему всё-таки много лет, а XMLHttpRequest в восьмой версии браузера тогда ещё не обкатался.

На этот раз я получил нумерную ошибку (скриншота не сохранилось), по номеру которой я нашёл сообщение на сайте Микрософт, что ошибка связана с неверной кодировкой, пришедшей со стороны сервера. В «Хроме» посмотрел кодировку — оказалось, что кодировка с сервера приходит как «cp1251»: Кодировка cp1251 (1.55КиБ) Интернет Эксплорер такую кодировку не понял, один из админов вписал её руками, поскольку при смене версии ПХП заменили сервер FastCGI на php-fpm, стоило сменить эту кодировку на «windows-1251» как всё заработало.

Видимо, встретив странную кодировку, IE не смог понять как ему читать то, что пришло, он вообще не заполнил некоторые свойства, а объект, попытавшись получить к ним доступ, не понимал в чём дело и выдавал пустую ошибку, которая и символизировала это «я не понял что произошло».
8 февраля 2013 13:48

vladon (vladon.ru)
8 февраля 2013, 15:39

Ну так-то всё верно, согласно RFC 2854:

charset
         The optional parameter "charset" refers to the character
         encoding used to represent the HTML document as a sequence of
         bytes. Any registered IANA charset may be used [...]

Среди зарегистрированных IANA ( http://www.iana.org/assignments/character-sets/character-sets.xml ) нет такого charset'а (cp1251).

А вообще, я очень удивлён, что на дворе 2013 год, а ваши прогеры до сих пор не осилили utf-8.

bolk (bolknote.ru)
8 февраля 2013, 15:56, ответ предназначен vladon (vladon.ru):

А вообще, я очень удивлён, что на дворе 2013 год, а ваши прогеры до сих пор не осилили utf-8.
Посмотрите, для интереса, в какой кодировке «Мой круг» (http://moikrug.ru)

В чём преимущество перевода нашего продукта на UTF-8? Недостатки я знаю — медленнее всё станет.

PastorGL (инкогнито)
8 февраля 2013, 16:48, ответ предназначен bolk (bolknote.ru):

Надо же. Однако, японцы для МойКруга — не целевая аудитория :)

bolk (bolknote.ru)
8 февраля 2013, 16:51, ответ предназначен PastorGL

Для нас — тоже :)

Мохов Олег (o-mokhov.ya.ru)
8 февраля 2013, 19:40

А ты точно об 8-м экплорере говоришь? А то скриншот похож на windows 8, где оно уже нет, кажется.

bolk (bolknote.ru)
8 февраля 2013, 19:54, ответ предназначен Мохов Олег (o-mokhov.ya.ru):

Скриншот точно Виндоуз 8, в которой запущен ИЕТестер (http://www.my-debugbar.com/wiki/IETester/HomePage), в котором я и искал в чём баг. А найден баг был в «оригинальном» IE8 под Windows XP.

vladon (vladon.ru)
9 февраля 2013, 07:59, ответ предназначен bolk (bolknote.ru):

А почему медленнее-то?
Из достоинств: ну может не японские иероглифы, но букв татарского алфавита в windows-1251 тоже нет. :-)

bolk (bolknote.ru)
9 февраля 2013, 09:53, ответ предназначен vladon (vladon.ru):

А почему медленнее-то?
Операции подсчёта длины строки, регулярные выражения, substr и прочие подобные гораздо медленнее, потому что в UTF-8 размер одного символа в байтах варьируется от 1 до 6 байт, а однобайтных строках мне чтобы адресоваться на энтый символ, достаточно адресоваться на энтый байт.
но букв татарского алфавита в windows-1251 тоже нет. :-)
В нашем продукте и это без надобности.

vladon (vladon.ru)
9 февраля 2013, 10:23, ответ предназначен bolk (bolknote.ru):

> А почему медленнее-то?
Операции подсчёта длины строки, регулярные выражения, substr и прочие подобные гораздо медленнее, потому что в UTF-8 размер одного символа в байтах варьируется от 1 до 6 байт, а однобайтных строках мне чтобы адресоваться на энтый символ, достаточно адресоваться на энтый байт.
Ну можно внутри хранить всё в 1-байтовой кодировке, а выводить, конвертируя в utf-8.

Но в принципе, если необходимости расширяться на более другие языки нет, то действительно незачем.
> но букв татарского алфавита в windows-1251 тоже нет. :-)
В нашем продукте и это без надобности.
А разве вы не делаете документооборот для Татарстана? Я даже помню ваша девочка писала, что для Татнефти и правительства РТ.

bolk (bolknote.ru)
9 февраля 2013, 10:35, ответ предназначен vladon (vladon.ru):

Ну можно внутри хранить всё в 1-байтовой кодировке, а выводить, конвертируя в utf-8.
Однобайтовая кодировка — это всего 256 значений. А UTF-8 — это горааааздо больше значений, мне сейчас лень считать сколько, но очевидно же, что в 256 значениях нельзя хранить любое бо́льшие число, так что в чём суть предложения-то?
А разве вы не делаете документооборот для Татарстана? Я даже помню ваша девочка писала, что для Татнефти и правительства РТ.
То, что он у нас в Татарстане используется не говорит о том, что это «документооборот для Татарстана». Например:

http://gov.tuva.ru/news.aspx?id=9221
http://www.tadviser.ru/index.php/Проект:Администрация_Приморского_края_(Практика_СЭД)
http://www.cnews.ru/top/2012/04/16/moskva_likvidiruet_sed_luzhkova_25_tys_chinovnikov_otpravlyayut_v_oblaka_485865

vladon (vladon.ru)
10 февраля 2013, 07:56

ну по 1му абзацу я вообще ступил :-)
по второму: а что если, например, казахи заинтересуются вашими продуктами?

bolk (bolknote.ru)
10 февраля 2013, 09:45, ответ предназначен vladon (vladon.ru):

По второму: а что если, например, казахи заинтересуются вашими продуктами
Я не имею права комментировать планы и стратегии компании.

vladon (vladon.ru)
10 февраля 2013, 20:23

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

gogis (инкогнито)
11 февраля 2013, 13:26

В чём преимущество перевода нашего продукта на UTF-8? Недостатки я знаю — медленнее всё станет.
А потом прибегает задыхающийся пм и изречет - "нам нужна интернационализация!!1".
Очень смешно, на imdb.com стали переводить названия тайтлов по геопризнаку, а вот поискать ничего не выйдет, потому что у них сайт на ISO.

Почти всегда сейчас выгодней начинать сразу на utf-8. Железо дешевеет и становится круче, а зарплата программистам только растет :)

bolk (bolknote.ru)
11 февраля 2013, 14:38, ответ предназначен gogis

А потом прибегает задыхающийся пм и изречет — «нам нужна интернационализация!!1»… Почти всегда сейчас выгодней начинать сразу на utf-8.
У нас, знаете ли, коммерческая организация. Есть цель, есть бюджет, делаем. Именно в таком порядке.

alshur (инкогнито)
11 февраля 2013, 20:46, ответ предназначен bolk (bolknote.ru):

Ещё в шестёрке была аяксовая проблема с кодировкой: http://htmlcssjs.ru/JavaScript/?30

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)