» Hardware » Software » Windows » Internet » Humor » Other

Кодировки кириллицы

Argon On-Line » Internet » Webmastering
 

Как известно, в рунете формально действуют 6 русских кодировок: однобайтовые windows-1251, KOI-8R, IBM866, ISO-8859-5, русская Mac и двухбайтовая UTF-8.

Проблема русских кодировок в Интернете сейчас уже практически решена за счёт фактической монополизации Web’а кодировкой windows-1251 от Microsoft, которая является родной для 80-90% рабочих станций, работающих под управлением Windows всех версий.

Некогда лидирующая кодировка KOI-8R оттеснена на второй план. Ещё недавно она была основной, т.к. пришла вместе с Юниксами из розовых пелёнок интернета. KOI-8R — дитя технологического несовершенства, когда русским духом в интернете и не пахло (в ней буквы расположены не по алфавиту, а по сходству произношения с английскими буквами). Надо было как-то передавать 8-битные русские буквы через 7-битные англоязычные почтовые серверы и никто не гарантировал, что экзотическая кириллица дойдёт до адресата не в виде абракадабры. Так и родилась KOI-8R: если английские серверы отсекали старший бит, то русский текст доходил условно читабельным, правда на руглише (русские слова английскими буквами). В электронной почте эта кодировка до сих пор считается стандартом, даже дядя Билли до сих пор оставил её по умолчанию в своём почтовом клиенте Outlook Express.

В кодировке IBM866 (она же DOS CP-866) web-страницы писать не стали, так как старушка DOS исчезла с наших компьютеров раньше, чем интернет добрался до народных масс. Практически все юзеры смотрели web из окон, а вот из DOS’а — почти никто.

Кодировки ISO-8859-5 и русскую Mac можно считать экзотическими, первая нигде и ни кем не использовалась (видимо дяденьки из ISO высосали её из пальца), а маки в нашей стране — это скорее диковинка, чем реальность.

UTF-8 — сравнительно новая двухбайтовая кодировка, призванная заменить весь существующий зверинец старых кодировок. Но что-то никто не торопится это делать. И хотя для XML-документов кодировка UTF-8 является стандартной по умолчанию, в и-нете её не найдёшь днём с огнём (равно как и самих XML-документов :-).

Таким образом, в переходный период борьба шла в основном между кодировкой хранения web-страниц KOI-8R, так как практически все интернет-серверы работали под юниксами, и кодировкой пользователей windows-1251, которые смотрели эти страницы из окон 95 или 98 калибра. Поэтому и возникла проблема перекодировки web-контента. Результат этой борьбы — время от времени созерцание в браузере абракадабры вместо русского текста.

Чехарда с кодировками не оставила равнодушными наших талантливых и вездесущих программистов. Они взяли популярный web-сервер Apache, который родом тоже из юниксов, и написали для него патчи русификации, благо Apache является программой с открытым исходным кодом. Получился русский Apache, который принудительно перекодировал русское содержимое web-страниц по определённым правилам. Оригинальный Apache в то время ни сном ни духом не слышал о многообразии кодировок кириллицы.

Русский Apache создал ещё больше проблем. Это я испытал на свое шкуре. При выдаче web-страницы по запросу браузера Apache.ru перекодирует её из кодировки хранения (koi-8r) в кодировку клиента (например, windows-1251). Допустим на сервере лежит HTML-код в koi8-r, в заголовке страницы, как и положено, стоит meta-тзг:

<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">

При передаче браузеру в Windows происходит перекодировка koi > win. Таким образом, текст страницы оказался в кодировке windows-1251, а в заголовке по прежнему стоит тот же meta-тэг charset и koi8-r будет установлена браузером, в результате чего web-страница будет нечитабельной. Юзеру придётся вручную выбрать нужную кодировку.

Чтобы избежать таких ситуаций из заголовков web-страниц пришлось вообще выкинуть meta-тэг charset. Но всё равно нет гарантии, что кодировка клиента будет определена корректно, так как кодировка браузера по умолчанию может не совпасть с кодировкой HTML-документа. А если web-страницу ошибочно опубликовать на сервере в кодировке windows-1251, то при перекодировании koi > win русский текст в браузере окажется в неизвестной кодировке, то есть окончательно испортится.

Короче говоря, web-мастерам пришлось бороться с принудительным перекодированием в Apache.ru. (например, с помощью настроек Apache или файла .htaccess).

Сейчас ситуация утряслась в виду следующих причин:

  • оригинальный Apache дорос таки до поддержки русских кодировок;
  • web-хостеры (они же владельцы юникс-серверов) догадались отключить перекодирование в Apache.ru или поставили оригинальный Apache, который ничего не перекодирует;
  • web-хостеры стали использовать в качестве кодировки хранения windows-1251 (даже на юникс-серверах), что позволило прекратить бесконечное и бессмысленное перекодирование web-страниц при их передаче браузерам клиентов, работающих преимущественно под Windows.
  • все современные версии браузеров научились автоматически определять кодировку HTML-страницы (meta-тэг charset — это самое лучшее решение, на 100% гарантирующее правильное отображение кириллицы)

Как ни странно, парадокс ситуации состоит в том, что монополия какой-то одной кодировки (ей оказалась windows-1251) — это благо для всех, в отличии от бардака, создаваемого несколькими конкурирующими кодировками.

 
Еще
Оглавление раздела
Содержание / Новости

Карта сайта
О сайте
Ссылки

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







К началу страницы© 2002—2008 Argon