12 марта 2003 г.
Практически каждому пользователю приходилось сталкиваться с проблемой неправильно декодированных документов, загруженных из Internet. В чем же причина многообразия применяемых ныне кодировок и как решить задачу нечитабельности текстов?
В первых ЭВМ, появившихся в США в 50-х годах, вопрос представления текстов вообще не стоял — вычислительные машины применялись исключительно для математических расчетов. Проблема обработки текстов (листинги программ и т. д.) в больших ЭВМ стала насущной позже, в 60-е годы.
Как известно, компьютеры хранят всю информацию в виде набора байтов, каждый из которых способен принимать значение от 0 до 255. Для того чтобы представить в памяти компьютера текстовую информацию, необходимо определить, каким значением будет кодироваться каждый символ. Такое соответствие между символами и кодирующими их байтами называется таблицей кодировки символов (character set table).
В 60-е годы таблицы кодирования символов разрабатывались каждым производителем компьютеров отдельно и содержали, в основном, английский алфавит и арабские цифры. Стандартизацией кодовых таблиц впервые занялся американский национальный стандартизирующий орган — ASA (позднее — ANSI), которым и был утвержден стандарт ASCII. По первому стандарту ASCII (1968 год) для кодирования символов применялось 7 битов, соответственно таблица содержала 128 буквенно-цифровых и специальных символов. О кодировании языков, не содержащих латиницу, речь тогда не шла.
Кодировки кириллицы
Со временем вычислительная техника стала активно использоваться в неанглоязычных странах, где каждый пользователь хотел бы общаться с компьютером на своем национальном языке. Проблема заключалась в том, что 128 символов 7-битовой таблицы просто не хватало для кодирования еще и национального алфавита. Результатом стало введение расширенного 8-битового стандарта ASCII, способного содержать 256 символов.
Справедливости ради надо отметить, что первая отечественная кодировочная таблица, стандартизированная по ГОСТ-13052 в 60-х годах, также была 7-битовой и содержала только русские буквы. Принятая позже KOI7 (ГОСТ 19768-74) включала как кириллицу, так и латиницу, но только заглавные литеры. И лишь только KOI8 cтала 8-битовой и содержит полный набор русских и английских символов.
В наши дни кодировочные таблицы для национальных символов устроены следующим образом. Для кодирования применяется восемь бит (всего 256 символов), при этом младшая половина кодовой таблицы совпадает с ASCII, а старшая половина (десятичные коды 128—255) содержит национальную кодировку. Такая организация позволяет правильно отображать и обрабатывать латинские буквы, цифры и знаки препинания на любом компьютере, независимо от его системных настроек.
Наборы символов в разных ОС |
Операционная система |
Кодировочная таблица |
MS Windows 9x/NT/2000/XP |
Windows-1251 |
Sun Solaris, Linux, FreeBSD и другие версии UNIX |
KOI8, ISO-8859-5 |
DOS, IBM OS/2 |
DOS CP866
|
MacOS |
Macintosh 10007 |
В то же время кодирование символов национального алфавита, в частности, кириллицы, как правило, существенно отличается в различных таблицах, в результате русский текст, записанный в MS-DOS, не читается в Windows и т. д. Подобная неразбериха в кодировании обусловлена тем, что кириллические кодировки вводились без согласования — cоветские стандартизирующие организации принимали свои ГОСТы, производители операционных систем их дружно игнорировали и вводили собственные кодировки. В результате мы получили в наследство как минимум пять кодировочных таблиц: две — от Microsoft (для DOS и для Windows), две — для UNIX и одну для Apple MacOS (см. табл.).
Универсальное решение
По мере того как все большее количество людей получали доступ к Всемирной cети, многообразие применяемых кодировок оказывалось все более серьезным препятствием на пути к информационным ресурсам других наций. Сложившаяся ситуация потребовала введения новой универсальной единой таблицы для всех национальных языков, вследствие чего был принят стандарт Unicode, или ISO/IEC 10646.
Данный стандарт (первая версия Unicode 1.0 вышла в 1991 г.) явился результатом сотрудничества Международной организации по стандартизации (ISO) с ведущими производителями компьютеров и программного обеспечения. Каждый символ в этом стандарте кодируется 16 битами, что позволяет ему охватить 65 536 символов — несравнимо больше, чем в принятых ранее 7- и 8-битовых кодировках.
Еще одним важным отличием Unicode от других систем кодировки является то, что он не только приписывает каждому символу уникальный код, но и определяет различные характеристики этого символа, например тип символа (прописная или строчная буква, цифра, знак препинания и т. д.), атрибуты символа (отображение слева направо или наоборот, пробел, разрыв строки), соответствующая прописная или строчная буква, соответствующее числовое значение (для цифровых символов).
Проблемы перекодировки решаемы
Получение нечитабельных сообщений, как правило, связано с тем, поддерживает ли данную кодировку приложение, участвующее в отправке/получении данных. Например, часто ошибки генерируются самим Web-сервером, который отправляет запрашиваемую Web-браузером страницу в неправильной кодировке. В этом случае ее необходимо выбрать вручную в меню обозревателя. В основном, последние версии Web-браузеров поддерживают все кодировки русского языка, проблематично лишь использование старых версий Internet-обозревателей, которые еще не поддерживали в полной мере русский язык.
Подобным образом обстоит ситуация и с электронной почтой. Перекодировать текст в сообщение электронной почты иногда не удается из-за несоответствия указания типа кодировки в заголовке письма и используемой на самом деле. Решить эту проблему помогут специальные программы-перекодировщики. С текстовыми файлами, созданными в других ОС (например, в DOS), еще проще: в Windows небольшой файл можно просмотреть с помощью блокнота, выбрав шрифт Terminal или открыв текст в том же Internet Explorer.
|
|
Уже сегодня стандарт Unicode является основным для хранения текста во многих современных компьютерных системах. Однако при передаче документов в формате Unicode через Internet возникает проблема — этот стандарт не совместим с большинством Internet-протоколов. Причина в том, что часть битов двухбайтового пространства в Internet-протоколах используется в качестве служебных, в Unicode же этот диапазон занят под другие цели. Для достижения совместимости были разработаны несколько форматов преобразования Unicode (UTF — Unicode Transformation Format), из которых наиболее распространенным сегодня является UTF-8. Этот формат определяет правила преобразования каждого кода Unicode в набор байтов (от одного до трех), пригодных для транспортировки Internet-протоколами. Кстати, некорректное преобразование в UTF-8 и обратно и приводит к тому, что мы иногда получаем электронные сообщения с одними вопросительными знаками вместо читабельного текста.
Дальнейшее развитие стандарта Unicode связано с добавлением новых языковых групп, в которые предполагается включать кодировку для письменностей мертвых языков, не попавших в первоначальную таблицу. Для кодирования этих дополнительных символов был разработан новый формат UTF-16. Однако для базовой языковой плоскости эти два формата полностью тождественны.
В чем же причина того, что Unicode до сих пор не доминирует во всех информационных системах? Здесь следует отметить некоторые объективные трудности его внедрения. Одна из них, и cамая главная — шрифт, содержащий все символы Unicode, будет иметь очень большой размер — от 20 до 100 МБ. Выходом из положения может послужить предложенная Microsoft загрузка шрифтов по требованию, принятая в Web-браузере Internet Explorer. Однако пока этот вопрос до конца не решен.
Глоссарий
ANSI (American National Standards Institute) — Американский национальный институт стандартов, разрабатывает стандарты для ИТ и других областей.
ANSI-кодировка — используется для представления символов в OC Windows. Для кодирования используется 1 байт
(8 бит), поэтому можно закодировать 256 символов. Первые 128 совпадают с таблицей кодирования символов ASCII, вторые 128 применяются для представления спецсимволов, национальных алфавитов и отличаются от расширенного набора ASCII, используемого на ПК.
ASCII (American Standard Code for Information Interchange) — Американский стандартный код обмена информацией. ASCII-кодировка используется для представления символов в ОС MS-DOS.
KOI8-R, KOI8-U — 8-битовая кодировочная таблица кириллицы соответственно для русского и украинского языков. Аббревиатура KOI означает Код для Обмена и обработки Информации.
Unicode — кодовая таблица, использующая 2 байта для представления каждого символа. Стандарт Unicode был разработан с целью создания единой кодировки символов для всех современных и многих древних письменных языков.
|
|
Перекодировщики
Как поступить, если электронное сообщение в процессе передачи подверглось нескольким перекодировкам, вследствие чего его не удается расшифровать простым перебором кодировочных таблиц? Или если возникли проблемы с читабельностью текста при его переносе из одного приложения Windows в другое посредством конвертации или при помощи буфера обмена? Наиболее оптимально в этих случаях использовать специальные утилиты-перекодировщики, которые помогут легко и быстро декодировать текст. Как правило, они распространяются бесплатно и могут быть загружены из Internet.
Утилита Штирлиц IV является одной из наиболее популярных и многофункциональных среди декодировщиков. Программа позволяет расшифровывать сообщения, которые прошли до 9 уровней перекодирования, и при этом очень легка в пользовании. Самый простой путь — текст нечитабельного сообщения скопировать в буфер обмена, а затем вставить в окно программы, предварительно выбрав в меню опцию "Декодировать при вставке". Можно сделать и по-другому: нечитаемое электронное сообщение сохранить на диске, после чего загрузить его в декодер при помощи команды Файл|Открыть.
В большинстве случаев автоматический режим работы помогает решить проблему нечитабельности письма. В противном случае можно попробовать подобрать кодировку вручную, ведь Штирлиц умеет работать с множеством перекодировок. К единственному серьезному недостатку программы можно отнести отсутствие поддержки KOI8-U и украинского языка.
Утилиты, применяемые для перекодировки |
Продукт |
AutoDecode 2.0 |
TCode 2.16 |
E-Coder 2.0 |
Штирлиц IV |
Производитель |
ZEONet Software |
А. Бойко |
Етайп Software |
Вс. Лукьянин |
Internet-адрес (www.) |
-- |
alexboiko.da.ru |
gorlach.etype |
shtirlitz.ru |
Цена |
бесплатно |
бесплатно |
$10 |
бесплатно |
Зато Штирлиц IV имеет полезную функцию для автоматизации — пакетный режим работы, в котором утилита автоматически перекодирует указанное количество файлов в заданную кодировку и сохраняет их в определенном каталоге. Кроме того, программа позволяет конвертировать текст, набранный транслитом (т. е. когда вместо кириллицы используются сходные по звучанию буквы латиницы).
Программа ТCode 2.16 для определения первоначального типа кодировки использует первые 25 слов текста. Процесс перебора всех кодировочных таблиц продолжается до тех пор, пока не будет достигнут заданный уровень пропорции русских букв. С одной стороны, такой подход позволяет значительно ускорить поиск правильной кодировки, с другой — данный метод не гарантирует успешного восстановления украинского текста. Тем не менее, ТCode 2.16 — довольно мощный декодер, позволяющий восстанавливать письма, которые подверглись даже 6-кратной перекодировке. Восстановление производится полностью автоматически, хотя есть и ручной режим работы. В этом режиме доступны кодировки: Win1251, KOI8, DOS CP866 и ISO8859-5.
Программа E-Coder 2.0 может перекодировать сообщения (или просто текстовые файлы) в двух режимах — вручную и автоматически. Если в ручном режиме вы ошиблись с выбором таблицы перекодировки, утилита позволяет в любой момент привести текст в первоначальное состояние нажатием на кнопку Сброс, можно также просмотреть всю последовательность преобразований при помощи кнопки История.
Еще одна утилита AutoDecode 2.0, распространяемая бесплатно для некоммерческого использования, позволяет переводить текст из одной кодировки в другую и работает c Win1251, KOI8, ISO8859-5 и CP866. Программа имеет как автоматический, так и ручной режим работы, обладает простым и оригинальным интерфейсом.
Несмотря на все усилия, предпринимаемые стандартизирующими организациями, вряд ли следует ожидать перехода на единый стандарт кодирования в ближайшем будущем. А раз так, то пользователю и впредь придется решать проблемы читабельности того или иного текста самостоятельно.
Причина многообразия кодировок — в специфике первых ЭВМ
Разработка таблиц символов началась тогда, когда ЭВМ не были универсальными вычислительными машинами, пригодными для различных задач. В то время разные компьютеры (VAX/VMS, IBM-360, СМ-4) имели разные возможности и разные реализации кириллицы. Отмечу, что даже для компьютеров класса IBM PC на момент распада СССР существовало несколько таблиц символов с различной раскладкой кириллицы (вспомните "Лексикон" и драйвер KeyRus — ряд символов в их таблицах не совпадал).
Совершенно не понятен тот факт, что даже компания Microsoft для своей операционной системы MS-DOS поддерживала таблицу кириллицы CP-866, а для MS Windows она придумала новую — CP-1251.
Кодировка КОИ-8 (а позднее KOI8-R, стандарт RFC 1489) пришла к нам от "больших" компьютеров старшего поколения, и, естественно, она древнее CP-866, используемых в первых IBM PC. Поскольку Internet начинала строиться именно на тех многопользовательских ЭВМ, неудивительно, что кодировка КОИ-8 оказалась в Сети раньше других.
|
|
|