 |
ITrader
Современная, простая программа с неограниченными возможностями преобразования
времени, знаний и опыта в деньги! Бесплатный доступ ко всем финансовым рынкам,
к мировым торгам и профессиональному росту. Скачай и открой бесплатный Демо-счет!
Дистанционное обучение. Депозит от 1000 рублей. ФГ Калита-Финанс.
Подробнее... |
Интернет
Кодонезависимый знакогенератор кириллицы |
Дата публикации: 23 Марта 2004
Автор: Владимир Бакланов
Как
известно, в рунете формально действуют 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-тзг:
При передаче
браузеру в 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) –
это благо для всех, в отличии от бардака, создаваемого
несколькими конкурирующими кодировками.
В память о
беспределе перекодировок я создал знакогенератор,
который нечувствителен к любым самым садистским
сочетанием кодировок и перекодировщиков, на любых
платформах, с любой комбинацией meta-тэгов charset или
их полным отсутствием, для любых браузеров с поддержкой
спецификации HTML 4.0+ и JavaScript.
Для
однобайтовых кодировок (KOI-8R, windows-1251, IBM866
[или DOS cp866], ISO-8859-5, Mac) знакогенератор
кириллицы имеет следующий вид:
Сохраните
этот код в виде файла, например, “encode.html” и
просмотрите в браузере. Попробуйте перекодировать файл в
разные кодировки. Попробуйте менять кодировки просмотра
в браузере. Русский текст должен читаться всегда.
Если
некоторые страницы имеют двухбайтовую кодировку UTF-8,
то скрипт нужно немного модифицировать:
Только не
забывайте, что meta-тэг charset=UTF-8 указывать нельзя,
иначе скрипт не будет работать. Однако, стоит отметить,
что скрипт № 2 имеет чисто теоретическое значение,
нежели практическое. Это связано с тем, что web-страницу
в двухбайтовой кодировке UTF-8 вообще-то бессмысленно
размещать на сервере с автоматическим перекодированием
контента, так как это приведёт к невосстановимой порче
HTML-кода. Для публикации сайта в UTF-8 нужно найти
хостера, не использующего перекодирование. При наличии
такого хостера сайт можно публиковать в любой кодировке
и тогда все эти скрипты не нужны, просто на каждой
странице нужно поставить meta-тэг charset с
соответствующей кодировкой.
Надеюсь, что
этот знакогенератор Вам не пригодится при отсутствии
проблем с кодировками, а при наличии оных кому-то
поможет.
***
Смотрите также:
Популярность сайта
Интернет-магазин - это просто!
Продвижение сайта в поисковых системах
Попробуйте считать на русском
Зарабатываем с WebMoney
Все статьи рубрики
Интернет
|