<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Чудо{вищные} заметки &#187; charset</title>
	<atom:link href="http://miracle.rpz.name/tag/charset/feed/" rel="self" type="application/rss+xml" />
	<link>http://miracle.rpz.name</link>
	<description>Sorry for my terrible english. My native language is PHP.</description>
	<lastBuildDate>Tue, 17 Aug 2010 12:10:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>AJAX и проблемы с кодировкой</title>
		<link>http://miracle.rpz.name/2008/11/28/ajax-charset/</link>
		<comments>http://miracle.rpz.name/2008/11/28/ajax-charset/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 10:50:30 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[charset]]></category>

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