16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

О кодировках русского языка

09.09.2006

Виктор Куц

Давным-давно, более полувека тому назад, американцы придумали компьютер. Причем создавали они его для собственных нужд. И так как в США государственным является английский язык, то и общение с компьютером предполагалось только на этом языке. О существовании других языков и народов тогда как-то особо не задумывались, тем более, что и "общение" пользователей с компьютерами в те былинные времена происходило исключительно с помощью двоичных кодов.

Но время шло, компьютер потихоньку завоевывал мир, постепенно теряя таинственный ореол инструмента для избранных и, в конце концов, превратился в прозаическое орудие труда (и развлечения) секретарш и инженеров, бухгалтеров и школьников. Даже большие начальники стали водружать на свои столы эти не очень понятные им агрегаты, дабы посетители могли воочию лицезреть всю глубину прогрессивности руководства.

ASCII

Короче, компьютер пришел в широкие народные массы, и тут оказалось, что эти самые массы, в большинстве своем слабо владеющие английским языком, желают изъясняться на своих родных языках. Ан не тут-то было - к тому времени в компьютерной индустрии фактическим стандартом стала 7-битная кодовая таблица ASCII (American Standard Code for Information Interchange - Американский Стандартный Код для Информационного Обмена), оперирующая всего лишь 128 уникальными символами. Этих символов вполне хватало для отображения строчных и прописных букв английского алфавита, цифр и основных знаков препинания, а также некоторых управляющих (неотображаемых) символов, большая часть которых использовалась в старых протоколах связи. Каждому элементу набора ASCII соответствует свой целочисленный символьный код (0-127), представляемый 7-ю битами, тогда как старший разряд мог использоваться для целей управления (чаще всего - для управления передачей в старых системах связи).

ISO 8859-5

Проблема с дефицитом уникальных символов для других языков решилась достаточно быстро и относительно безболезненно - стандартная 7-битная кодовая таблица ASCII обрела еще один, 8-й полноправный бит - под эгидой Международной организации по стандартизации (ISO) появилось целое семейство стандартов ISO 8859-X. Дополнительный бит дал возможность использовать теперь уже 256 символов, причем младшая половина кодовой таблицы (символы с кодами 0-127) полностью повторяет ASCII, а старшая - содержит уникальные элементы национальных кодировок. Такая организация национальных кодовых таблиц позволяет правильно отображать и обрабатывать латинские буквы, цифры и знаки препинания на любом компьютере, независимо от его языковых настроек. В дружной семье кодировок ISO нашлось место и для нашей кириллицы, получившей кодовое обозначение ISO 8859-5. Характерной ее особенностью является строго алфавитное размещение в ней русских букв, очень удобное для корректной сортировки записей в базах данных. Как выяснилось чуть позже, дитя оказалось мертворожденным: ISO 8859-5 конфликтовала с псевдографикой в набравшей к тому времени силу DOS, а позже не нашла она понимания и у авторов Windows.

КОИ8-R

Кроме того, с 80-х годах прошлого века, когда получил распространение Интернет, достаточно остро встала проблема "обрезания кодировок" сообщений электронной почты. Почтовое сообщение на пути от одного адресата к другому проходит через множество самых различных почтовых серверов, далеко не все из которых умели корректно работать с 8-битными кодировками. Такие серверы - "диверсанты" просто отбрасывали "лишний" старший бит, и дальше письмо шло уже в "правильной" кодировке ASCII. Так что в письме, написанном в кодировке ISO 8859-5, после "обрезания" все кириллические символы автоматически превращались в латинские, чей номер в таблице был меньше исходного ровно на 128. Нетрудно представить себе, во что превращалось такое послание.

Именно для борьбы с излишне "умными" почтовыми серверами была разработана таблица символов КОИ8-R (аббревиатура КОИ означает Код для Обмена и обработки Информации), в максимальной степени устойчивая к "обрезанию". В ней позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите, расположенным в нижней части таблицы. Таким образом, если в тексте, написанном в КОИ8, убирать восьмой бит каждого символа, то мы получим не бессмысленный набор различных символов, а более или менее "читабельный" текст, хотя и написанный английскими буквами. Именно поэтому таблица символов КОИ8-R (она же - KOI8-R) до сих пор является стандартом, пусть и неофициальным, для обмена почтой и новостями в Рунете. Кроме этого, KOI8-R до сих пор является официальной русской кодировкой в операционных системах семейства UNIX. Под Windows тексты в кодировке KOI8-R можно читать и распечатывать, используя специальные шрифты типа КОИ-8 для Windows. А вот набирать тексты в этой кодировке гораздо сложнее - для этого нужно установить специальную раскладку клавиатуры.

СР866

Однако для работы в популярной в те времена ОС DOS KOI8-R была малопригодна - так же как и ISO 8859-5, в ее таблице некоторые русские символы находились на тех местах, которые в других кодировках были заняты псевдографическими символами, являвшимися в то время одним их важнейших элементов оформления текстов. Так что хочешь - не хочешь, а пришлось снова выкручиваться, придумывая еще одну кодировку кириллицы - СР866, в таблице которой русские буквы "обтекали" со всех сторон эти несчастные графические символы. Поэтому кодировка СР866 не портила вид программ, использующих для работы текстовые окна, а также обеспечивала нормальное отображение в них символов кириллицы. CP866 до сих пор жив и даже здравствует вместе с породившей его DOS: так, к примеру, русские имена в файловой системе FAT кодируются в этой кодировке. Назвали кодировку CP866 "альтернативной кодировкой DOS", поскольку она была альтернативой тогдашнему официальному стандарту - кодировке ISO-8859-5, которая, соответственно, стала называться "основной кодировкой DOS", несмотря на то что ею все равно почти никто не пользовался.

Windows 1251

Чуть позже, в период повального перехода с DOS на Windows, оказалось, что все существующие на тот момент кириллические кодировки (ISO-8859-5, КОИ8-R и CP866) конфликтовали с первыми версиями новой ОС. Что ж, дело уже привычное - сделали еще одну кодировку: Windows 1251 (иногда встречается обозначение CP1251), которая в настоящее время оказалась наиболее востребованной (впрочем, как и сама Windows), в том числе и в web-документах Рунета.

MAC

Не отстала от других и компания Apple, посчитавшая, что ее довольно экзотичные в наших краях компьютеры достойны того, чтобы иметь свою собственную кодировку кириллицы. Сказано - сделано, и на свет появилась еще одна кодовая страница: Macintosh 10007 (или попросту MAC).

UNICODE

Несомненным достоинством всех традиционных 8-битовых кодовых таблиц является краткость представления текстовой информации. Однако из этой краткости проистекает и ряд принципиальных недостатков, органически с ней связанных. Так, поскольку символы разных языков в 8-битных кодировках представляются одними и теми же значениями от 0 до 255, то оказывается практически невозможным сочетание нескольких различных кодовых таблиц в одном документе. Не говоря уже о проблемах, возникающих с кодированием дальневосточных языков и индийских слоговых азбук, количество символов в которых существенно превышает 128-символьный лимит. А уж о тех безобразиях (другого слова просто не подобрать), что творятся с русскоязычными кодировками, уже лишний раз поминать не хочется. Таким образом, необходимость привести все существующие сегодня кодировки к одному "общему знаменателю" стала очевидной даже неспециалисту. И такая "унифицированная" кодировка не могла не появиться.

Стандарт UNICODE согласуется со стандартом ISO/IEC 10646-1, определяющим универсальный набор символов UCS (Universal Character Set). Для того чтобы в нем нашлось место для букв и символов ВСЕХ известных человеческих языков, для кодировки каждого элемента отводится уже не 8, как раньше, а 16 двоичных разрядов (так называемая двухбайтовая кодировка), что позволяет кодировать максимум 65536 элементов. Таким образом, "унификация" кодов букв достигается за счет двукратного увеличения размера текстовых файлов. Причем первые 256 символов в UNICODE полностью копируют кодовую таблицу Latin-1 (ISO 8859-1), что обеспечивает его совместимость со старыми приложениями. В настоящее время распределено всего лишь около 40000 позиций для практически всех известных алфавитов (включая даже древнеегипетские иероглифы), и всем им, соответственно, присвоены стандартные имена.

Понятно, что полная реализация UNICODE в основных операционных системах означает настоящую революцию в области обработки текстов. С сожалением приходится признать, что за 15-летнюю историю существования этого стандарта особых подвижек в этом направлении не произошло. Даже Windows, на системном уровне наиболее последовательно поддерживающая UNICODE, все еще полна абсолютно иррациональных ограничений, вытекающих из ее исторических корней. В UNIX ситуация ничуть не лучше, поскольку здесь поддержка UNICODE осуществляется не на уровне ядра, как в Windows, а конкретными приложениями. Другой до сих пор не решенной проблемой UNICODE является слишком большой размер шрифтов этого стандарта, порой доходящий до 100 Мбайт. Кроме того, современные реализации массовых протоколов передачи данных по сети Интернет и электронной почте не позволяют передавать 16-битные символы. Поэтому для пересылки текстов, имеющих кодировку UNICODE, используются специализированные 7-битные или 8-битные представления UNICODE: UTF-7 (RFC2152) или UTF-8 (RFC2279) (UTF означает "UCS Transformation Format") соответственно.



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты