Шрифт:
В 1967-м году ISO [2] выпускает рекомендацию ISO 646, которая фактически сделала систему ASCII уже международным стандартом. И это при том, что система ASCII заведомо не удовлетворяла самым очевидным требованиям, предъявляемым к системе кодирования символов, пригодной для международного применения.
Как известно, количество одних только ныне используемых естественных языков, используемых в мире, превышает 2500. Общее количество символов, используемых только в одном из них – японском, к примеру, – превышает 65000.
[2]
Об этой и других транснациональных стандартизирующих организациях см. Приложение #2.
В системе ASCII же для кодирования каждого символа использовалось 7 бит, а её таблица символов содержала 128 позиций (из которых 32 были отведены под управляющие последовательности, а собственно под символы было отведено, соответственно, 96). Среди этих 96 позиций 52 были уже забронированы за заглавными и строчными буквами английского алфавита, 10 – за арабскими цифрами, прочие – за различными знаками препинания и специальными символами. Для изображения символов и букв «всех прочих» национальных языков, кроме английского, ISO определила в этой таблице «открытые позиции», общим количеством… 10 штук.
Чтобы обеспечить «поддержку» работы с другими языками, кроме английского – не «работу», а именно «поддержку», рассматриваемую ISO, таким образом, как нечто опциональное! – предлагалось использовать технические ухищрения – управляющие последовательности (escape-последовательности). После того, как компьютер встречал в тексте специальную управляющую последовательность, считалось, что произошла смена стандартной таблицы символов, используемой в ASCII, на одну из «дополнительных», содержащую символы того или иного «дополнительного» языка. Таких «дополнительных» таблиц ISO было утверждено в общей сложности более 180!
Затем систему кодирования ASCII пересмотрели, и для кодирования каждого символа стали использовать не 7, а 8 бит (этот 8-й бит существовал и ранее, но использовался не для представления данных, а для осуществления контроля чётности). Заметим, что в тексте стандарта ASCII такое «расширение» никак не регламентировано. Это привело к многочисленным проблемам, так как существующее на тот момент ПО работало с ASCII в его оригинальном виде [3] .
[3]
О. Татарников. «Крестоносцы», 1997 // «Компьютерра», №189 (стр. 18)
Объём таблицы символов возрос до 256 позиций. Это позволяло отказаться от использования управляющих последовательностей для обеспечения работы с некоторыми языками, символы которых можно было уместить в появившееся место [4] . ISO выпускает стандарты ISO 2022 и серию стандартов ISO 8859-X (X – цифра от 1 до 15), описывающие, как следует задействовать новую возможность.
Серия стандартов ISO 8859-X по заказу ISO разрабатывалась с середины 1980-х гг. ассоциацией крупнейших европейских производителей компьютерной техники (ECMA, European Computer Manufacturer's Association). В каждом из этих стандартов были определены 15 разных таблиц символов, каждая из которых содержала 256 позиций.
[4]
Заметим, что свободных позиций там было не так уж и много, так как некоторые были уже зарезервированы за псевдографическими символами. Такие символы необходимы при работе в текстовом «режиме работы» (с позволения сказать – при ближайшем рассмотрении оказывается, что он неполноценен абсолютно в каждом из важнейших аспектов. Например, векторные по своей природе символы представляются там с помощью растровых шаблонов…), первоначально созданным корпорацией IBM в семействе своих видеокарт, применённом в компьютерах PC.
При этом оговаривалось, что первые 128 символов каждой таблицы должны обязательно быть теми же самыми, что в стандартной 128-символьной таблице системы ASCII (и рекомендации ISO 646). Таким образом, в каждой из этих таблиц вновь обеспечивалась неприкосновенность для символов английского языка. Для представления символов других языков отводились остающиеся позиции, во вторых половинах этих 256-символьных таблиц.
Совершенно очевидно, что определённая в ISO 8859-X схема заведомо неприемлема, так как в ней символы разных языков обозначаются одними и теми же двоичными последовательностями, и определить, какую именно таблицу символов использовать для их прочтения – ISO 8859-1 или же, например, ISO 8859-5, – невозможно, если не знать этого заранее.
Однако это – только половина проблемы. Дело в том, что американские корпорации не соблюдали стандарты ISO серии 8859-X. В «национальных» версиях своего программного обеспечения они использовали расширенную до 8 бит систему кодирования ASCII и таблицы символов, содержащие 256 позиций; первые 128 символов в которых соответствовали стандартной 128-символьной таблице 7-битной системы ASCII (то есть вновь английский язык не затронут), а расположение символов национальных языков во второй половине таблицы не соответствовало расположению, определённому ISO в стандартах серии 8859-X [5] .
[5]
Кстати, некоторые из стандартов серии 8859-X, а именно – ISO 8859-1, ISO 8859-4, ISO 8859-6 – позднее, в 1998-м году, были пересмотрены самим ISO.
Таким образом возникали ситуации, когда даже для одного и того же языка сосуществовали две, а то и большее количество таблиц символов, несовместимых между собой и без наличия дополнительной информации программно неразличимых.
Возьмём в качестве примера многострадальный русский язык. Для кодирования больших и малых букв русского алфавита используются следующие несовместимые или не полностью совместимые между собой таблицы (и это не полный список; см.:
– ISO использует таблицу «Cyrillic», описанную в стандарте ISO 8859-5;