Кодирование текста. Проблема русских кодировок



Предыдущая | Следующая
Кодирование текста. Проблема русских кодировок
Сначала выясним, как текст представляется в памяти компьютера. Дело в том, что каждому символу, вводимому с клавиатуры, выводимому на экран и хранящемуся в файле, сопоставляется уникальный номер, называемый кодом символа. Так что в памяти компьютера текст фактически представляет собой набор кодов. Служебные символы, не видимые на экране, например, возврат каретки и перевод строки, обозначающие конец каждой строки текста, также имеют свои коды.
Совокупность кодов символов вместе с описанием, какой код какому символу соответствует, образует кодировку или кодовую таблицу. Каждая кодировка имеет свое имя, например, 1251 или КОИ-8.
Поскольку любой язык использует свой набор символов, для каждого языка кодировки, как правило, различны. (Исключение — некоторые западноевропейские языки, использующие одну кодировку для всех.) Русский язык использует сразу несколько различных кодировок. Вот с этими кодировками и связана одна из главнейших проблем Рунета — русской части Интернета.
А все потому, что русские версии разных операционных систем используют разные кодировки. Так, русская версия Windows использует кодировку 1251, а русская версия MS-DOS — 866 (она же ISO-8859-5). А если добавить сюда еще кодировку, используемую русской версией операционной системы UNIX, — КОИ-8 и русской версией компьютеров Macintosh — MacCyrillic, кодировок станет уже четыре. И это только главные — на памяти автора этой книги существовало еще несколько менее распространенных кириллических кодировок ("основная" кодировка ГОСТ, "болгарская", "американская", "югославская" и т. п.).
Примечание
Лет десять тому назад была разработана универсальная кодировка Unicode, поддерживающая ВСЕ имеющиеся на Земле языки. Но, хотя в настоящее время эта кодировка стала весьма популярной, проблема разных кодировок остается.
Чем все это грозит? Дело в том, что в разных кодировках одни и те же символы (это относится только к символам русского языка — с латинскими все в порядке) имеют разные коды. В результате текст, набранный в одной кодировке, при просмотре в другой становится абсолютно нечитаемым.
Все мы пытались открыть текстовый документ, созданный в Блокноте, в Norton Commander и видели, что при этом получается — текст превращается в набор непонятных закорючек. А все потому, что русские кодировки 866 (MS-DOS), используемая Norton Commander, и 1251 (Windows), используемая Блокнотом, не совпадают! В них один код соответствует разным символам.
Каков же выход?
Выхода нет. Можно надеяться только на то, что какая-то из кодировок станет стандартом и постепенно вытеснит конкурентов. Пока что на роль такого (негласного) стандарта претендует 1251, хотя интернетчики старого поколения, пользующиеся UNIX-совместимыми системами, продвигают на эту роль КОИ-8. Во всяком случае, сейчас большинство Web-страниц, имеющихся в русском сегменте Сети, написано в кодировке 1251. Хотя сейчас практически все Web-обозреватели поддерживают все имеющиеся в наличии кодировки.
Специально для указания кодировки, в которой была набрана Web-страница, комитет W3C предусмотрел в языке HTML особый тег <мета>. Так, чтобы дать Web-обозревателю понять, что страница набрана в кодировке 1251, нужно вставить в секцию заголовка такой код:
<МЕТА HTTP-EQUIV= "Content-Type" CONTENT="text/html; t^>charset=windows-1251">
Если же мы создадим Web-страницу в кодировке КОИ-8 (правда, в Блокноте это сделать не получится — нужен текстовый редактор, который поддерживает эту кодировку), то должны будем использовать для указания кодировки такой код:
<МЕТА HTTP-EQUIV="Content-Type" CONTENT^" text/html; charset=koi8-r">
Если Web-страница набрана на одном из европейских языков, использующих кодировку 1250, тег <мета> будет таким:
<МЕТА HTTP-EQUIV="Content-Type" CONTENT="text/html; ^>charset=windows-1250">
Для англоязычных Web-страниц кодировку указывать, в принципе, необязательно. Но если есть желание, то можно вставить в секцию заголовка страницы вот эту строку:
<МЕТА HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-l">
Для русскоязычных же Web-страниц кодировку лучше указывать всегда. Это избавит от возможных проблем и нас — Web-дизайнеров — и посетителей наших будущих сайтов.

 

Содержание Книга по php и mysql