<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>AJAX и проблемы с кодировкой</title><html>Вот уже полтора года в draft-ах пылился пост о надуманности проблем с кодировками и т.н. AJAX-ом.
Каждый раз, когда на форумах всплывали вопросы подобного характера, хотелось дать ссылку, на всякий всплеск заходов на блог по запросам &quot;кодировка, ajax, проблема&quot; хотелось его опубликовать, но мне казалось, что пост ещё не закончен, надо ещё чуть-чуть дописать...
Но вот буквально сегодня появился удивительно похожий пост - &lt;a href=&quot;http://blog.fxposter.org/2008/11/28/jquery-ajax-and-cp1251/&quot;&gt;ajax, cp1251&lt;/a&gt;. Похожий по содержанию, но совершенно противоположный по смыслу.
Посему свой черновичок я решил удалить, а поведать свою &quot;истину&quot; в форме критики совета fxposter-а.
&lt;blockquote&gt;Ни для кого ни секрет, что кодировкой получаемых через Ajax данных по-умолчанию принимается UTF-8.&lt;/blockquote&gt;
На самом деле это секрет. Для многих секрет. И многие не понимают почему это так.
Внутреннее представление строк (и регулярных выражений) в JavaScript для всех не-ASCII последовательностей как раз UTF-8.
Отсюда и проистекает т.н. &quot;проблема&quot; - если кодировка не указана явно и используется нелатиница, она будет интерпретирована как utf-8 последовательность.
&lt;blockquote&gt;&lt;b&gt;Update 29.11&lt;/b&gt; Свежий воздух и Давид Мзареулян остудили пыл, поэтому спешу уточнить о чём именно будет идти речь ниже. 
Итак - у вас есть некий ресурс в однобайтовой кодировке (к гадалке не ходи это будет windows-1251) и вы озаботились освоить новый buzzword по имени AJAX. Немного почитав, вы делаете первые робкие шаги в этом направлении и тут же наступаете на &quot;детские грабли&quot;, а затем, немного отдышавшись, мчитесь на форумы с криком о помощи. И вам эту помощь окажут - переделай мол, свой ресурс на utf-8... Конечно-конечно скажете вы и пойдёте переделывать...&lt;br /&gt;
Я же хочу остеречь от таких опрометчивых шагов.
&lt;/blockquote&gt;

Cтандартное решение, которое наперебой советуют все - &quot;используй utf-8 и нет проблем&quot;.

И советчики правы - проблем действительно не будет.

Просто трафик увеличится &quot;вдвое&quot;. Те же данные, тот же результат, а трафика &quot;в два раза&quot; больше. Ага?

&lt;span style=&quot;text-decoration: line-through;&quot;&gt;Что вы там говорите насчёт порошка?!?&lt;/span&gt;

Если вам этот фактор кажется мало***щим, то на этом чтение надо прекратить и начать переделывать свой проект на использование UTF-X,
остальным же оставлю несколько рецептов, которые помогут избежать проблем при использовании однобайтовых кодировок в т.н. AJAX-приложениях: &lt;!--more--&gt;
&lt;ul&gt;
	&lt;li&gt;Первое, оно же главное - ВСЕГДА указывайте кодировку контента. В любом ответе сервера с текстовым контентом обязан быть заголовок &lt;i&gt;Content-Type: your/type; charset=your-charset&lt;/i&gt;.
Дешевле всего это сделать, настроив сервер (например в php через &lt;a href=&quot;http://ru2.php.net/manual/en/ini.core.php#ini.default-charset&quot;&gt;default_charset&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Указывайте charset при включении javascript в тело документа (&lt;script type=&quot;text/javascript&quot; charset=&quot;your-charset&quot;&gt; )&lt;/li&gt;
	&lt;li&gt;Указывайте ПРАВИЛЬНЫЙ charset
&lt;blockquote&gt;предварительно установив соответствующий заголовок - &quot;Content-Type: text/html; charset=cp1251&quot;&lt;/blockquote&gt;
В данном &lt;span style=&quot;text-decoration: line-through;&quot;&gt;конкретном&lt;/span&gt; &lt;span style=&quot;text-decoration: line-through;&quot;&gt;взятом за жопу&lt;/span&gt; случае fxposter сам себе злобный буратина.
&lt;blockquote&gt;Any registered &lt;a href=&quot;http://www.iana.org/assignments/character-sets&quot;&gt;IANA charset&lt;/a&gt; may be used, but UTF-8 is preferred.&lt;/blockquote&gt;
Ну нету среди any registered кодировки с названием cp1251...&lt;/li&gt;
&lt;/ul&gt;
Для полноты картины приведу пару проблемных моментов, с которыми столкнуться прийдётся:
&lt;ul&gt;
	&lt;li&gt;Не позволяйте AJAX-ответам, которые содержат &quot;нелатиницу&quot; оставаться в кеше браузера (при 304 Not Modified ответ поднимется из кеша, но в качестве charset &quot;некоторые браузеры&quot; используют utf-8)&lt;/li&gt;
	&lt;li&gt;
&lt;blockquote&gt;&lt;a href=&quot;http://www.ietf.org/rfc/rfc4627.txt&quot;&gt;JSON text SHALL be encoded in Unicode&lt;/a&gt;.  The default encoding is UTF-8.&lt;/blockquote&gt;
Этим правилом НАГЛО пользуются производители различных библиотек для json_[en|de]code, но браузерам (как мы выяснили ранее) главное кодировку указать, а там всё разрулится.
Отсюда и &quot;проблема&quot; - кодировать данные в JSON нужно вручную, распространнёные библиотечные функции на входе ожидают utf-8.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
Мораль сей басни я жду от вас в комментариях.</html><type>rich</type></oembed>