Таким образом возникали ситуации, когда даже для одного и того же языка сосуществовали две, а то и большее количество таблиц символов, несовместимых между собой и без наличия дополнительной информации программно неразличимых.
Возьмём в качестве примера многострадальный русский язык. Для кодирования больших и малых букв русского алфавита используются следующие несовместимые или не полностью совместимые между собой таблицы (и это не полный список; см. http://czyborra.com/charsets/ http://czyborra.com/charsets/cyrillic.html#Unicode):
• ISO использует таблицу «Cyrillic», описанную в стандарте ISO 8859-5;
• корпорации IBM и Microsoft в своих ОС PC DOS и MS DOS использует таблицу CP866. CP866 — это один из представителей целой серии таблиц, используемых для «поддержки национальных языков» различными производителями DOS (CP437, CP850, CP852 и т. д., вплоть до CP874. Интересно, что ISO 8859-5 в этом наборе есть и упоминается как CP915). Очевидно, эта серия таблиц была составлена разработчиками и региональными продавцами компьютерной техники (Microsoft называет её «OEM charsets»), но из приведённых в документации ОС PC DOS 2000 ((tm) of IBM Corp.) данных ясно, что она как-то между прочим и фактически тайком была стандартизирована ISO — в документе ISO 9241-3, описывающем параметры мониторов[6] — «в дополнение» к уже определённой ранее серии стандартов 8859-X;
• корпорация Apple в русскоязычной версии своей ОС Mac OS использует свою таблицу X-Mac-Cyrillic;
• корпорация Microsoft в своих ОС Windows 3.X и Windows 9X использует таблицу CP-1251. CP-1251 — это также представитель целой серии таблиц (CP-125X, где X — от 0 до 8), использованных Microsoft в различных «национальных» версиях Windows. При этом в документации к Windows 3.X Microsoft называет их «ANSI charsets», и вполне возможно, что они действительно были где-то и когда-то стандартизированы ANSI;
• советский (теперь — русский) национальный стандартизирующий орган ГОСТ определяет таблицу КОИ-8 (ГОСТ 19768-74; в этом стандарте определяется также 128-символьная таблица КОИ-7), затем — таблицу, известную как «основная кодировка ГОСТ» (ГОСТ 19768-87). (Впоследствии, правда, ГОСТ принял «альтернативную кодировку», таблица которой соответствовала, за малым исключением, таблице CP866 — только было уже поздно).
На практике в аппаратном обеспечении компьютерных систем[7] и в ОС для работы с текстами на разных языках использовались и по сей день используются 8-битная система кодирования символов вкупе с вышеописанными различными таблицами символов, объёмом в 256 позиций каждая. Однако американские компьютерные корпорации IBM и Xerox ещё в первой половине 1980-х начали работу над созданием новой «многоязычной» системы кодирования, в которой для представления символов используются двоичные последовательности длиною в 16 бит, а также единая большая таблица символов объёмом в 65536 позиций.
Впоследствии к этим корпорациям присоединились другие, и был начат проект, названный представителями американской компьютерной индустрии «Unification Code», или Unicode. Причём, дошло до того, что в 1991-м году эти корпорации (в их числе также Adobe, Microsoft и др.) для продвижения Unicode в качестве международного стандарта создали одноимённый транснациональный консорциум[8].
Главной задачей Unicode официально было объявлено сведение существующих в мире символов естественных языков в указанную большую таблицу и обеспечение одновременной и «равноправной» работы с ними. То есть, очевидно, когда количество недовольных «проблемой кодировок» пользователей превысило некоторую «критическую массу», указанные корпорации решили «обнародовать» систему Unicode и представить её как решение данной проблемы, делая намучившимся операторам ПК заманчивое, на первый взгляд, предложение — покупать поддерживающее её ПО.
Однако на самом деле и система Unicode является не окончательным решением проблемы кодирования символов, а лишь паллиативом. Дело в том, что метод кодирования, используемый в оригинальной версии Unicode, не предусматривал использования управляющих последовательностей для переключения между «базовой» и возможными «дополнительными» таблицами символов (как в ISO 646), поэтому максимальное количество символов, которые можно было представить, пользуясь Unicode, равнялось объёму одной-единственной («базовой») таблицы символов, используемой в этой системе — 65536.
6
Также в этой связи там упоминается документ немецкого национального стандартизирующего института — DIN — за номером 66234. Между прочим, и DIN, и ANSI и ГОСТ Р являются членами ISO.
7
Имеются в виду, в первую очередь, BIOS материнских плат и видеокарт, в которых определяются начертания символов, используемых в «текстовом видеорежиме», а также матричные принтеры.