Конвертер кодировок текста

ASCII: сто двадцать восемь символов, на которых держится всё остальное

Перекодировать текст из ASCII ↓

Посмотрите на клавиатуру перед собой. Латинские буквы, цифры, скобки, знак доллара, решётка, "собака", обратная косая черта: почти все значки на клавишах, не считая национальной раскладки, собраны в одном документе, которому больше шестидесяти лет. Называется он ASCII, что расшифровывается как American Standard Code for Information Interchange, то есть американский стандартный код для обмена информацией. Произносить это слово принято как "аски". Первая редакция вышла в 1963 году, а привычный вид со строчными буквами таблица приобрела к 1967 году.

До ASCII в вычислительной технике царила неразбериха, по сравнению с которой поздние споры между Windows-1251 и KOI8-R кажутся мелкой размолвкой. Телеграфные аппараты работали на пятибитном коде Бодо, где букв и цифр вместе получалось так мало, что приходилось переключать регистры специальным сигналом. Производители компьютеров изобретали собственные шестибитные таблицы, зачастую несколько штук для разных моделей. Две машины разных фирм не могли обменяться даже простым текстом. Комитет при американской ассоциации стандартов взялся навести порядок и после долгих обсуждений остановился на семи битах, дающих 128 комбинаций.

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

Таблица ASCII выглядит сухо, но за каждым решением в ней стоит расчёт. Цифры расположены так, что четыре младших бита кода равны самой цифре, и перевод символа в число сводится к отбрасыванию старших битов. Заглавная и строчная буквы различаются единственным битом, поэтому смена регистра выполняется одной простейшей операцией. Буквы идут подряд по алфавиту, и сортировка слов превращается в сравнение чисел. Инженеры 1960-х годов экономили каждую микросхему, и эта экономия до сих пор ускоряет работу программ.

Первые тридцать две позиции заняты не знаками, а командами. Они достались в наследство от телетайпов, электрических пишущих машинок, подключённых к линии связи. Код номер семь заставлял аппарат звякнуть колокольчиком, чтобы привлечь внимание оператора. Код тринадцать возвращал каретку к началу строки, код десять прокручивал бумагу на строку вверх. Из этой пары выросла проблема, с которой сталкиваются и сегодня: Windows обозначает конец строки двумя символами, как настоящий телетайп, а системы семейства Unix обходятся одним, и текстовый файл, перенесённый между ними, порой слипается в сплошную ленту.

Отдельная история связана с последним, сто двадцать седьмым кодом. Все семь его битов равны единице, и это не случайность. Текст в то время хранили на бумажной перфоленте, где единица означала пробитое отверстие. Заклеить дырку нельзя, зато можно пробить все остальные. Поэтому ошибочный символ "удаляли", превращая его в сплошной ряд отверстий, а читающее устройство такие ряды пропускало. Так появился символ удаления. Клавиша Ctrl тоже родом из тех времён: в сочетании с буквой она посылает управляющий код, номер которого равен порядковому номеру буквы в алфавите. Привычное сочетание для прерывания программы есть не что иное, как третий код таблицы, означающий "конец текста".

У ASCII был могущественный соперник. Компания IBM продвигала для своих больших машин восьмибитную кодировку EBCDIC, в которой буквы алфавита шли с разрывами, а разные модели пользовались несовместимыми вариантами. В 1968 году президент США Линдон Джонсон распорядился, чтобы все компьютеры, закупаемые федеральным правительством, поддерживали ASCII. Это решение, а затем появление мини-компьютеров, Unix и сети ARPANET определили победителя, хотя EBCDIC до сих пор продолжает работать на мейнфреймах в банках и страховых компаниях.

Буква "A" в названии стандарта оказалась его главным ограничением. В таблице нет ни одной буквы с диакритикой, не говоря уже о кириллице или греческом. Сначала страны пытались уместиться в те же семь бит и заменяли редкие значки своими буквами: в британском варианте вместо решётки стоял знак фунта, а в советском КОИ-7 русские буквы вытеснили строчную латиницу. Когда контроль чётности ушёл в прошлое и восьмой бит освободился, начался расцвет кодовых страниц. CP437 и CP866 в MS-DOS, серия ISO-8859, семейство Windows-125x: все они устроены одинаково, нижняя половина в точности повторяет ASCII, а верхнюю каждый заполнял по своему усмотрению. Именно поэтому в любом перепутанном тексте латинские буквы и цифры остаются на месте, а портится только национальная часть.

Тот же принцип сохранила и UTF-8, современный всемирный стандарт. Её создатели поставили условие: любой файл в ASCII обязан быть правильным файлом в UTF-8 без единого изменения. Благодаря этому переход на Юникод не потребовал переписывать миллионы программ, а старые документы на английском языке открываются сегодня так же, как полвека назад. Для сравнения, UTF-16 и UTF-32 этим свойством не обладают, что и помешало им распространиться в интернете.

Строго говоря, чистый ASCII как кодировка документов почти исчез, растворившись в UTF-8. Но сам набор из 128 символов остаётся общим языком всей вычислительной техники. На нём записываются адреса сайтов и электронной почты, команды сетевых протоколов, ключевые слова практически всех языков программирования. Даже доменные имена на кириллице при передаче по сети превращаются в строчки из латинских букв, цифр и дефисов. Можно сменить операционную систему, язык и алфавит, но под ними всё равно обнаружится таблица, составленная для телетайпов в начале 1960-х годов.