История кодировок: пути и лабиринты
12 Май 2009

Проблема с кодировкой известна каждому пользователю: кто из нас не получал письма с немыслимыми «кракозябрами» вместо текста или не открывал веб-страничку в нечитаемом виде? Проблема эта, кроме наших личных неудобств, связана с многомиллионными затратами, геополитическими интригами и борьбой за лидерство в IT-индустрии и монополией на многие интернет-процессы.

Различные кодировки известны очень давно. Если не отвлекаться на такую специфическую область, как нотная запись звуков, то первым кодом можно признать азбуку для незрячих Луи Брайля. В ее основе лежит двоичный код — из шести ячеек позиций, каждая из которых может быть выпуклой или гладкой. Это позволяло закодировать 26=64 символа. Но Брайль разработал и расширители кода (аналог клавиши Shift), действующие на символы до отмены расширителя, и изменения одного символа (современные escape-коды).

Следующими «великими кодировками» были, конечно же, азбука Морзе и код Бодо для телетайпной ленты. Подробнее прочесть захватывающую историю кодировок можно в статье известного публициста Ю. Ревича.

Вообще говоря, компьютер производит операции с цифрами (еще точнее — с их представлением в двоичном виде, но это уже совсем уведет нас в сторону), и ему, образно говоря, все равно, на каком конкретном языке к нему обращаются. Это проблема программ, перекодирующих привычные буквы и цифры в их цифровое представление, согласно условно принятым таблицам кодов.

В 1950-60-е годы каждый разработчик вычислительной техники создавал свои таблицы кодов. Были разные ГОСТы в бывшем СССР: мне, например, довелось застать пятидорожечную перфоленту с кодом БЦК-5, вытесненную позже восьмидорожечной ISO-7bit. Но, как мы теперь знаем, основная «кухня», в которой создавалась компьютерная отрасль, находилась в США. Американские корпорации также продвигали свои собственные кодировки, пытаясь достичь конкурентных преимуществ, привязывая покупателей к своей линейке оборудования.

Любителям истории техники, интересующимся соотношением советского и американского вкладов, рекомендую прочесть статью того же Ю. Ревича.

Постепенно стало ясно, что подобная ситуация не устраивает покупателей компьютерной техники и идет вразрез с национальными интересами США: ведь буквы английского языка в каждой из указанных систем кодировались по-своему, и это тормозило развитие национальной сферы IТ в США. Поэтому перед американским национальным стандартизирующим органом — ASA (позднее — ANSI, American National Standards Institute) — была поставлена задача: решить проблему путем разработки единого государственного стандарта на систему кодирования символов естественных языков в машинно-читаемом виде. Был создан специальный комитет (X3.4 Committee), для работы в котором пригласили представителей крупнейших корпораций — производителей компьютерной техники. Крупнейшие разработчики согласились принять участие в этой работе, поскольку к тому времени путаница в области систем кодирования достигла такой степени, что, очевидно, стала создавать проблемы и для них самих. Ведь речь шла уже о том, что из-за использования разных систем кодирования символов стал невозможен обмен информацией даже между двумя компьютерами, произведенными одной и той же корпорацией, но принадлежащими к разным «линейкам», или семействам. «У нас существовало более 60 различных систем, использовавшихся для кодирования символов естественных языков в компьютерах. Это было самое настоящее «вавилонское столпотворение», — констатировал в интервью американскому журналу «ComputerWorld» Боб Бемер (Bob Bemer), с 1956-го по 1962 гг. — работник корпорации IBM и один из главных разработчиков системы ASCII, которая в 1963 году была принята ANSI в качестве государственного стандарта США на кодирование символов естественных языков в машинно-читаемом виде.

По некоторым данным, ныне число одних только естественных языков в мире — более 2500. Общее количество символов, используемых лишь в одном из них — японском, к примеру, превышает 65000. В системе ASCII же для кодирования каждого символа использовалось 7 бит, а ее таблица символов содержала 128 (27=128) позиций (из которых 32 были отведены под управляющие последовательности, а собственно под символы — соответственно, 96). Среди этих 96 позиций 52 были уже «забронированы» за заглавными и строчными буквами английского алфавита, 10 — за арабскими цифрами, прочие — за различными знаками препинания и специальными символами. Для изображения символов и букв «всех прочих» национальных языков, кроме английского, ISO определила в этой таблице «открытые позиции» общим количеством... 10 штук. Чтобы обеспечить «поддержку» работы с другими языками, кроме английского, — не работу, а именно «поддержку», рассматриваемую ISO, таким образом, как нечто опциональное! — предлагалось использовать технические ухищрения — управляющие последовательности (escape-последовательности). После того, как компьютер встречал в тексте специальную управляющую последовательность, считалось, что произошла смена стандартной таблицы символов, используемой в ASCII, на одну из «дополнительных», содержащую символы того или иного «дополнительного» языка. Таких «дополнительных» таблиц ISO было утверждено в общей сложности более 180!

Затем систему кодирования ASCII пересмотрели и для кодирования каждого символа стали использовать не 7, а 8 бит (этот 8-й бит существовал и ранее, но использовался не для представления данных, а для осуществления контроля четности). Объем таблицы символов возрос до 256 (28=256) позиций. Это позволяло отказаться от использования управляющих последовательностей для обеспечения работы с некоторыми языками, символы которых можно было уместить в образовавшееся место. И история повторилась вновь, теперь уже во второй половине кодовой таблицы, отданной под национальные символы. Одних только кириллических вариантов было с десяток: и стандарты ISO (стандарты ISO 2022 и серия стандартов ISO 8859-X (X-цифра от 1 до 15), описывающие, как следует задействовать новую возможность), и советские ГОСТы, и разработки для разных операционных систем, таких как Unix или Apple... C появлением компьютеров воцарилась кириллическая кодировка DOS-866, содержащая, кроме русских букв, еще и символы псевдографики, позволяющие рисовать рамочки, тени и прочие оформительские прибамбасы. Но параллельно в разных программах «жила» кодировка КОИ-8 (ГОСТ 19768-74) и другие, менее популярные.

С приходом эры Windows началось внедрение таблицы CP-1251 (СР — Code Page, кодовая страница). CP-1251 — это также представитель целой серии таблиц (CP-125X, где X — от 0 до 8), использованных Microsoft в различных «национальных» версиях Windows.

Как вы уже догадались, расположение символов, а значит и коды символов во всех рассмотренных таблицах разные. Это вносило разнобой и требовало значительных усилий при переводе, например, программ, работающих под ДОС в среду Windows. Если помните, на первых сайтах Рунета были переключатели кодировки: Win, Мас, КОИ-8... Постепенно браузеры научились распознавать кодировку, точнее, она указывается в коде странички в тэге с метаданными.

Теперь вы владеете почти всей информацией о кодировках, на первый взгляд ненужной, но на самом деле важной и интересной: никто не знает заранее, какие знания пригодятся, а уж про кодировку-то — непременно.

Для решения проблемы глобального охвата планеты корпорации IBM и Xerox еще в первой половине 1980-х начали работу над созданием новой «многоязычной» системы кодирования, в которой для представления символов используются двоичные последовательности длиною в 16 бит, а также единая большая таблица символов объемом в 65536 позиций. Впоследствии к этим корпорациям присоединились другие, и был начат проект, названный представителями американской компьютерной индустрии «Unification Code», или Unicode. Причем дошло до того, что в 1991 году эти корпорации (в их числе также Adobe, Microsoft и др.) для продвижения Unicode в качестве международного стандарта создали одноименный транснациональный консорциум. Главной задачей Unicode официально было объявлено сведение существующих в мире символов естественных языков в указанную большую таблицу и обеспечение одновременной и равноправной работы с ними.

Таблица символов, используемая в Unicode, устроена следующим образом. Она разбита на 256 рядов. Первые ряды содержат некоторые из старых таблиц символов (объемом в 128 или 256 позиций каждая), определенных для некоторых языков. Самый первый ряд (под номером 0) представляет собой таблицу ISO 8859-1 (в свою очередь, она содержит 128 символов из таблицы 7-битной системы ASCII, а также некоторые символы, используемые в языках стран Западной Европы).

Последующие ряды таблицы отведены под некоторые новые символы (например, математические), но преимущественно — под иероглифы. В общей сложности в таблице символов системы Unicode насчитывается около 28000 иероглифов. Система Unicode присваивает уникальный код любому символу, независимо от платформы, независимо от программы, независимо от языка. Unicode был принят как стандарт такими лидерами компьютерной индустрии, как Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys, да и многими другими. Именно эта схема кодирования используется современными технологиями и стандартами: например, XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML и так далее. Именно Unicode является официальной схемой реализации ISO/IEC 10646. Наконец, эта кодировка поддерживается во множестве операционных систем, во всех современных браузерах и в большом количестве других программ. Повсеместное распространение стандарта Unicode, как и доступность поддерживающих его средств, в настоящее время является одним из наиболее важных направлений развития индустрии программного обеспечения. Использование Unicode в многоуровневых приложениях или программных комплексах, построенных в рамках архитектуры клиент-сервер, а также при представлении данных в сети Интернет, приводит к значительному снижению расходов на поддержку этих продуктов или сервисов по сравнению со случаем использования старых схем кодирования. Действительно, Unicode позволяет создавать единый программный продукт или сайт Интернета для множества платформ, языков и стран без каких-либо переделок. А его использование при передаче данных между различными системами предохраняет эти данные от повреждения.

Стандарт Unicode был предложен некоммерческой организацией Unicode Consortium, образованной в 1991 году. Для представления каждого символа в этом стандарте используются два байта, что позволяет закодировать очень большое число символов 65535 из разных письменностей: в документах Unicode могут соседствовать русские, латинские, греческие буквы, китайские иероглифы и математические символы. Кодовые страницы становятся ненужными.

К сожалению, редко какой UNICODE TrueType шрифт содержит все 65535 возможных символов. Первым самым популярным таким шрифтом стал шрифт Arial Unicode MS, содержащий все знаки, идеограммы и символы, определенные в стандарте Unicode версии 2.1. Этот шрифт поставляется с MS Office 2000/XP. Процент пользователей MS Windows среди аудитории пользователей любого сайта почти равен 100. Шрифт можно установить и на Windows 95/98. Следовательно, можно говорить о практически стопроцентной доступности страницы, использующей шрифт Arial Unicode MS.

Почему, напротив, в качестве международных принимались и принимаются заведомо несовершенные стандарты, часто недоработанные, и появилось большое количество несовместимых таблиц символов? Корпорациям-производителям ПО, очевидно, весьма выгодно продавать разные «национальные» версии операционных систем, офисных пакетов и так далее за отдельные деньги. Так, Microsoft продавала «американскую», «пан-европейскую», «восточноазиатскую», «ближневосточную» и «тайскую» версии Windows 95, а IBM — стандартную, «арабскую», «израильскую», «японскую», «корейскую», «китайскую» и «тайваньскую» версии PC DOS. Отсюда возникновение несовместимых таблиц символов, содержащих 256 позиций каждая. Поскольку «проблема кодировок» теперь не касается английского языка, у ANSI и правительства США нет повода вмешиваться в ее решение, как это было в 1963-м. Более того, «проблема кодировок», не касающаяся английского, стратегически выгодна для США. Она обеспечивает лидерство США и его крупнейшего англоязычного партнера по НАТО — Великобритании (и Австралии) в сфере IT и отставание других стран, так как «проблема кодировок» препятствует информационному обмену между людьми, работающими с данными не на английском языке.

Так ли все это, решайте сами. Для нас же важно скорейшее внедрение кодировки Юникода.

Естественно, что состояние с национальными кодировками, при котором на расширение отдавался лишь восьмой бит байта, не устраивало никого, кроме англоязычных стран. А ведь в таких странах, как Корея, Япония, Китай, символов не десятки, а сотни и тысячи. Поэтому была создана специальная группа для разработки новой, устраивающей всех кодовой таблицы. Эта таблица получила название UNICODE, официальный сайт разработчиков — www.unicode.org. Если в статьях 2000-2002 годов о ней говорили в будущем времени, то начиная с 2003 года пошло все более успешное внедрение стандарта; ныне он сравнялся по популярности с ASCII и имеет тенденцию роста. В UNICODE для кодирования символа используются 2 байта, что позволяет закодировать 65 535 символов. Сюда с запасом войдут все известные ныне языки на Земле, все исчезнувшие и вновь создаваемые языки. Все задействованные коды символов можно посмотреть на специальной странице: www.utf8-chartable.de. Видно, что кириллица занимает позиции от U+0410, соответствующего букве «А», до U+044F, соответствующего букве «я», причем буква «ё» стоит «не на месте».

Немного о терминологии. UNICODE — это набор символов. Для того, чтобы браузер нормально его распознал, надо ему указать на специальную кодировку «UTF-8». Делается это в метатэге в начале веб-страницы: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.

Кодировка UTF-8 — это уже не просто набор символов, но и некоторая программная обработка. Например, для символов того же английского языка в UTF-8 текст по-прежнему отображается одним байтом; для расширенных символов кириллицы, иврита, иероглифов, скандинавских, индийских и африканских текстов задействуется второй байт. Можно встретить рассуждения о том, что страница в кодировке UTF-8 вдвое тяжелее, чем в Win1251. Это и так и не так одновременно. Во-первых, сам код HTML пишется на английском языке и остается однобайтовым. Во-вторых, все цифры, вкрапления латинскими буквами и английские знаки пунктуации — однобайтовые. За счет больших текстов на кириллице или на другом неанглийском языке объем страницы может возрасти процентов на 30. Но по сравнению с графикой, флеш-анимацией, джава-скриптами, внедренными в страницу, это увеличение составляет незначительную часть от объема сайта. Зато преимущества такой кодировки очевидны. Я собрал коллекцию: одна и та же фраза выложена на десятках разных языков — армянском, иврите, арабском, греческом, японском, исландском, казахском, чешском — в их национальных кодировках. Все работает. Правда, у вас должен быть на компьютере шрифт, поддерживающий UNICODE, но при установленной Windows XP обычно с этим проблем не бывает. Декодируйте в собственное удовольствие!

Интересное о компьютерных шрифтах читайте в статье автора «Из жизни шрифтов».

Материалы по теме

Статьи по теме


			

Написать комментарий


Вместе с вашим комментарием мы подарим вам отличный персональный профиль на «Планете школ» со всеми остальными её сервисами.
Если вы уже зарегистрированы на нашем сайте, то просто авторизуйтесь.

		
IV Всероссийский конкурс научно-инновационных проектов для старшеклассников
В 2009-2010 учебном году в 7 федеральных округах Российской Федерации компания «Сименс» проводит IV Всероссийский конкурс научно-инновационных проектов среди старшеклассников. Тема конкурса - «Технологии повышения эффективности на производстве и в жизни».
 
XII открытый конкурс для старшеклассников «Издательская деятельность в школе»
Ежегодный конкурс, который позволяет раскрыть творческий потенциал молодежи, используя разнообразные формы подачи информации.
Институт психоанализа объявляет об открытии стипендиальной программы
Впервые в России частный ВУЗ объявляет  стипендиальную программу, позволяющую лучшим студентам учиться бесплатно.
 
Фонд имени В.И. Вернадского
Стипендия им. В.И. Вернадского учреждена с целью поощрения учебной и научной деятельности студентов очного обучения высших учебных заведений. Стипендии назначаются на конкурсной основе как студентам российских вузов, так и зарубежным студентам. Конкурс среди иностранных студентов проводит московская конкурсная комиссия.