"Проблема кодировок": стечение обстоятельств или стратегический замысел?
В данном материале будет рассказано об одной из наиболее обсуждаемых как среди специалистов в области ИТ, так среди и рядовых пользователей компьютерной техники, тем – о проблеме представления (кодирования) символов естественных языков в машинно-читаемом виде. В кругах ИТ-общественности она получила название «проблемы кодировок».
Эта проблема состоит в том, что для решения задачи кодирования символов естественных языков в машинно-читаемом виде было предложено и принято множество стандартов, в том числе международных, которые несовместимы между собой и противоречат друг другу. В результате, как несложно догадаться, при работе с компьютерной техникой возникают многочисленные проблемы при обработке текстовой информации на ряде языков. Эти проблемы в значительной степени препятствуют и свободному обмену такой информацией, в том числе через сеть Internet.
В современном мире сложилась ситуация, когда положение той или иной страны в мировом сообществе напрямую зависит от того, какое положение она занимает в мировой сфере ИТ. И понятно, что поскольку участие страны в существующей мировой сфере ИТ в огромной степени определяется тем, как в этой сфере реализована поддержка работы с информацией на национальном языке, на котором говорит народ этой страны, «проблема кодировок» является чрезвычайно, даже стратегически, важной, как будет показано ниже.
К сожалению, в подавляющем большинстве материалов на тему «проблемы кодировок» их авторы (как русские, так и зарубежные) погружаются исключительно в одну тему – в описание многочисленных технических «внутренностей» различных стандартов, из-за которых при работе с тем или иным языком возникают проблемы. Если даже они и предлагают свои собственные варианты решения данной проблемы, то делают это, «не видя за деревьями леса» и не поднимая ряда нетехнических вопросов, которые имеют более глобальный характер. В результате ничего не меняется – несовместимые стандарты лишь продолжают множиться, и «проблема кодировок» остаётся нерешённой.
Для того, чтобы на практике приблизиться к решению «проблемы кодировок», нужно иметь представление о том,
– каким образом она возникла;
– кто её создал и продолжает поддерживать;
– кто несёт от неё наибольший ущерб, а кто – выигрывает.
Собственно, рассмотрению этих вопросов и посвящена статья.
К началу 1960-х годов мировая сфера производства компьютерной техники контролировалась рядом крупнейших транснациональных корпораций, головные отделения которых располагались, преимущественно, в одной стране – США. И сложилась ситуация, когда каждая корпорация в своих устройствах предлагала свою собственную систему для кодирования символов естественных языков, несовместимую с таковой системой конкурентов. Каждая корпорация таким образом хотела заставить покупателей приобретать исключительно свою «линейку оборудования», в рамках которой совместимость различных устройств была обеспечена.
Подобная ситуация не устраивала покупателей компьютерной техники и шла вразрез с национальными интересами США – ведь буквы английского языка в каждой из указанных систем кодировались по-своему, и это тормозило развитие национальной сферы ИТ в США. Поэтому американскому национальному стандартизирующему органу – ASA (позднее – ANSI) – была поставлена задача решить проблему путём разработки единого государственного стандарта на систему кодирования символов естественных языков в машинно-читаемом виде.
Был организован специальный комитет (X3.4 Committee), для работы в котором были приглашены представители крупнейших корпораций-производителей компьютерной техники. Некоторые согласились принять участие в этой работе, поскольку на тот момент путаница в области систем кодирования достигла такой степени, что, очевидно, стала причинять проблемы уже и им самим. Ведь речь шла уже о том, что из-за использования разных систем кодирования символов стал невозможен обмен информацией даже между двумя компьютерами, произведёнными одной и той же корпорацией, но принадлежащих к разным «линейкам» или семействам.
«У нас существовало более 60 различных систем, использовавшихся для кодирования символов естественных языков в компьютерах. Это было самое настоящее 'вавилонское столпотворение'»[1] – констатировал в интервью американскому журналу «ComputerWorld» Боб Бемер (Bob Bemer), с 1956-го по 1962-й годы – работник корпорации IBM и один из главных разработчиков системы ASCII, которая в 1963-м году была принята ANSI в качестве государственного стандарта США на кодирование символов естественных языков в машинно-читаемом виде. При этом принята она была в недоработанном виде; окончательная версия системы ASCII была утверждена в 1968-м году.
Заметим, что корпорация IBM – бесспорный лидер в производстве компьютерной техники в 1960-х – 1970-х гг. – тем не менее без каких-либо последствий для себя нарушала государственный стандарт ASCII на протяжении многих лет после его официального принятия (вплоть до августа 1981-го года, когда она выпустила первые компьютеры серии PC). IBM использовала в своих «мэйнфреймах» System/360, которые впервые поступили в продажу в 1964-м году, свою собственную, несовместимую с ASCII, патентованную систему кодирования символов – EBCDIC, – которая существовала в 57 различных версиях, в том числе «национальных». При этом получить от IBM документацию по версиям EBCDIC было чрезвычайно сложно.
В 1967-м году ISO[2] выпускает рекомендацию ISO 646, которая фактически сделала систему ASCII уже международным стандартом. И это при том, что система ASCII заведомо не удовлетворяла самым очевидным требованиям, предъявляемым к системе кодирования символов, пригодной для международного применения.
Как известно, количество одних только ныне используемых естественных языков, используемых в мире, превышает 2500. Общее количество символов, используемых только в одном из них – японском, к примеру, – превышает 65000.
В системе ASCII же для кодирования каждого символа использовалось 7 бит, а её таблица символов содержала 128 позиций (из которых 32 были отведены под управляющие последовательности, а собственно под символы было отведено, соответственно, 96). Среди этих 96 позиций 52 были уже забронированы за заглавными и строчными буквами английского алфавита, 10 – за арабскими цифрами, прочие – за различными знаками препинания и специальными символами. Для изображения символов и букв «всех прочих» национальных языков, кроме английского, ISO определила в этой таблице «открытые позиции», общим количеством… 10 штук.
Чтобы обеспечить «поддержку» работы с другими языками, кроме английского – не «работу», а именно «поддержку», рассматриваемую ISO, таким образом, как нечто опциональное! – предлагалось использовать технические ухищрения – управляющие последовательности (escape-последовательности). После того, как компьютер встречал в тексте специальную управляющую последовательность, считалось, что произошла смена стандартной таблицы символов, используемой в ASCII, на одну из «дополнительных», содержащую символы того или иного «дополнительного» языка. Таких «дополнительных» таблиц ISO было утверждено в общей сложности более 180!