Интернет Пресс - программы для Windows и Linux, статьи и материалы о компьютерах, бизнес-предложения.
Главная | Новости | Статьи | Веб-мастеру | Призы и подарки | Архив | RSS-канал | Карта сайта
Написать письмо автору сайта
Поиск
 

Интернет

Кодонезависимый знакогенератор кириллицы
 | 20:07:00 , 23 Ноября 2004

Автор: Владимир Бакланов , vladimir-bak@yandex.ru

Как известно, в рунете формально действуют 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).

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

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

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

В память о беспределе перекодировок я создал знакогенератор, который нечувствителен к любым самым садистским сочетанием кодировок и перекодировщиков, на любых платформах, с любой комбинацией meta-тэгов charset или их полным отсутствием, для любых браузеров с поддержкой спецификации HTML 4.0+ и JavaScript.

Для однобайтовых кодировок (KOI-8R, windows-1251, IBM866 [или DOS cp866], ISO-8859-5, Mac) знакогенератор кириллицы имеет следующий вид:

Скрипт № 1

Сохраните этот код в виде файла, например, “encode.html” и просмотрите в браузере. Попробуйте перекодировать файл в разные кодировки. Попробуйте менять кодировки просмотра в браузере. Русский текст должен читаться всегда.

Если некоторые страницы имеют двухбайтовую кодировку UTF-8, то скрипт нужно немного модифицировать: 

Скрипт № 2

Только не забывайте, что meta-тэг charset=UTF-8 указывать нельзя, иначе скрипт не будет работать. Однако, стоит отметить, что скрипт № 2 имеет чисто теоретическое занчение, нежели практическое. Это связано с тем, что web-страницу в двухбайтовой кодировке UTF-8 вообще-то бессмысленно размещать на сервере с автоматическим перекодированием контента, так как это приведёт к невосстановимой порче HTML-кода. Для публикации сайта в UTF-8 нужно найти хостера, не использующего перекодирование. При наличии такого хостера сайт можно публиковать в любой кодировке и тогда все эти скрипты не нужны, просто на каждой странице нужно поставить meta-тэг charset с соответствующей кодировкой.

Надеюсь, что этот знакогенератор Вам не пригодится при отсутствии проблем с кодировками, а при наличии оных кому-то поможет.

Источник: http://ca1.dax.ru



Оценок этой статье - 4. Средний балл - 5.00 Просмотров - 17436

Выставить оценку статье:


Читайте также:

  • Языки серверных скриптов
  • Немного слов о кодировках
  • Зачем нам нужен SSI
  • Эмуляция SSI
  • DHTML-скриплет - просто о простом
  • Автозаполнение сайта
  • Защита каталогов с помощью .htaccess
  • Как передать данные в html-файл
  • CGI+SSI - пример счетчика
  • По Интернету - со скоростью света
  • Обзор самых популярных онлайн-СМИ
  • Электронные библиотеки
  • Популярность сайта
  • Как подружиться с поисковыми машинами
  • Оптимизация сайта: проблема выбора
  • Создание универсального выпадающего меню
  • Программы автоматической регистрации сайта
  • Игровые сайты сети
  • Сравнительный тест эффективности языков программирования для WEB
  • Советы по созданию и раскрутке сайта

    Все статьи рубрики Интернет




  • Поиск
     

    Размещение рекламы | Контакты

    Главная | Новости | Статьи | Веб-мастеру | Призы и подарки | Архив | RSS-канал | Карта сайта

    Вверх
    Copyright © 2004 - 2024 г. При перепечатке гиперссылка на «Интернет Пресс» обязательна.