ASCII (, произносится ) — стандарт кодирования букв латинского алфавита, цифр, некоторых специальных знаков и управляющих символов, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ.
Представляет собой набор из 128 кодов символов, каждому из которых соответствует 7-битовое двоичное число. Его введение позволило упростить обмен данными между разными компьютерными системами. Европейской модификацией ASCII является стандарт Latin 1, российской — КОИ-7. ASCII целиком вошёл в состав более поздних систем кодирования, в частности ISO 8859 и Юникода, сохраняя обратную совместимость.
Во избежание путаницы с используемыми в других странах национальными кодами, основанными на ASCII, IANA рекомендует обозначать оригинальный код как US-ASCII.
Описание
Стандарт ASCII представляет собой 7-битный код без рекомендаций относительно контроля чётности, содержащий 27 = 128 кодовых позиций, в которых размещены следующие символы: десятичные цифры; латинские буквы; знаки препинания; орфографические знаки; диакритические знаки; математические символы; управляющие символы.
История С развитием вычислительной техники и языков программирования возможностей телетайпного кода ITA2 стало не хватать, что вынуждало производителей ЭВМ создавать расширения для ITA2 или же свои собственные коды. Кроме того, для записи на перфокарты использовались различные варианты кода Холлерита. Таким образом, к началу годов существовало достаточно большое количество кодировок латиницы, используемых как для передачи по линиям связи, так и для записи на носители — магнитную ленту, перфоленту и перфокарты, — таких как ITA2, , различные варианты BCDIC и т. д., причём даже в рамках одной и той же кодировки один код мог соответствовать различным символам в зависимости от модели и назначения устройства. Чтобы решить эту проблему, 4 августа 1960 года был создан комитет X3.2 (как часть комитета X3, сформированного 13 января того же года), в который вошли представители компаний IBM (в частности, ), AT&T, Bell Labs и других.
Работа по созданию ASCII началась 6 октября 1960 года, и 17 июня 1963 года, почти 3 года спустя, была опубликована его первая редакция (ASA X3.4—1963). В ней отсутствовали строчные буквы, а область из 28 кодовых позиций — была зарезервирована для дальнейшего использования. Велись споры о том, как использовать эту область — для добавления строчных букв или же управляющих символов.
В 1965 году была подготовлена новая редакция ASCII (ASA X3.4—1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов). Следующая редакция ASCII (USAS X3.4—1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу. Новые редакции ASCII продолжили выходить и далее (USAS X3.4—1968, ANSI X3.4—1977, ANSI X3.4—1986 и т. д.), однако кодовую таблицу изменения в них более не затрагивали.
Компания IBM первое время саботировала внедрение ASCII. В ней отдавали предпочтение собственной кодировке EBCDIC, являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита.
Структурные свойства таблицы Первая редакция ASCII содержала 36 управляющих символов, пробел, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, подразделяемых на группы: 8 знаков препинания (., ,, :, ;, !, ?, ', "); 5 знаков для финансовых и биржевых операций (#, $, %, &, @); 2 пары скобок ((, ), [, ]); 8 математических символов (+, -, *, /, \, =, <, >); 2 стрелки для блок-схем (↑, ←). Символ «подушка» (⌑), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках BCDIC, Fieldata и др., ни в одну из редакций ASCII не вошёл.
В редакции 1967 года был пересмотрен (сокращён до 33) набор управляющих символов и убраны стрелки, а также добавлены строчные буквы и 7 дополнительных символов (^, _, `, {, |, }, ~), после чего кодовая таблица приняла окончательный вид:
+ .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F 0. NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1. DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2. SP ! "
$ % & ' ( )
+ ,
. / 3. 0 1 2 3 4 5 6 7 8 9
<
> ? 4. @ A B C D E F G H I J K L M N O 5. P Q R S T U V W X Y Z [ \ ] ^ _ 6. ` a b c d e f g h i j k l m n o 7. p q r s t u v w x y z
~ DEL
Все символы в ASCII делятся на 4 группы по 32 символа: Управляющие символы предназначены для управления передачей и выводом текста на терминал. Группа начинается с символа NUL (), означающего незаписанный участок носителя, например перфоленты, и игнорируемого при выводе на экран или на печать. За пределами группы, в конце таблицы также располагается символ DEL (), означающий пробитый целиком участок перфоленты и сигнализирующий о том, что символ, записанный здесь ранее, был удалён, а значит, его также следует пропустить. Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей (—), форматирование (—), управление устройством (—) и разделители потоков данных (—). В редакции 1967 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов. Группа цифр и основных знаков препинания делится на две подгруппы по 16 символов, соответствующие верхнему и нижнему регистру. Группа начинается с пробела () — было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале для корректной работы алгоритмов сортировки. 9 символов после пробела — знаки препинания (!, ", #, $, %, &, ', (, )), идущие в том порядке, в котором их располагали на клавиатурах пишущих машин тех лет, за исключением скобок, которые заняли позиции и , поскольку цифра 0 оказалась под кодовой позицией пробела. Впрочем, на некоторых электромеханических пишущих машинах, в частности IBM Selectric, расположение этих знаков было иным в связи с наличием у них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от кодовой таблицы ASCII расположение этих знаков на клавиатуре было закреплено в IBM PC. Цифры идут во второй подгруппе — такое решение было принято для простоты преобразования ASCII в 4-битный двоично-десятичный код () и обратно, соответственно, путём отброса или добавления старших трёх битов кода цифры (0112): так, например, цифре 5 соответствует код (01101012) в ASCII и 01012 в BCD. По этой причине цифры невозможно было разместить в первой подгруппе, поскольку в ней первым идёт пробел. Другая причина расположения цифр в этой подгруппе — необходимость того, чтобы при сортировке большинство знаков препинания располагалось раньше цифр и букв. Символы точки и запятой в пишущих машинах тех лет дублировались в обоих регистрах. При создании ASCII было решено не дублировать их, а разместить в спаренных позициях символы < и >. Знак вопроса также спарен со знаком косой черты как на пишущих машинах. Группа заглавных букв начинается с символа «коммерческое „эт“» (@, ) — предполагалось, что для машин, поставляемых во Францию и Италию, этот символ будет заменяться на букву À. Положение заглавных латинских букв и цифр было выбрано из соображений совместимости с шестибитной кодировкой DEC SIXBIT. Три позиции после заглавных букв (, и ) также предполагалось при необходимости заменять на национальные символы. В редакции 1963 года в позициях и располагались, соответственно, символы «стрелка вверх» (↑) и «стрелка влево» (←), заменённые в редакции 1965 года на циркумфлекс (^) и подчёркивание (_). Группа строчных букв появилась в редакции 1965 года и была частично пересмотрена в редакции 1967 года. Все строчные буквы расположены так же, как и соответствующие заглавные, что позволяет переключать регистр инвертированием бита (если первым считать самый младший бит). Позиции , , и также предполагалось при необходимости заменять на национальные символы. Символ логического отрицания (¬, ), добавленный в редакции 1965 года, в редакции 1967 года был убран. Важная особенность ASCII — он, в отличие, к примеру, от ITA2, не использует переключение регистров. Хотя переключение регистров могло бы уменьшить число битов, требуемое для кодирования сообщения, и, следовательно, уменьшить время передачи и занимаемое место на носителях, оно также повысило бы вероятность не прочесть сообщение при его повреждении. Таким образом, было решено отказаться от использования регистров и кодировать все символы битами. Тем не менее, для возможности дальнейшего расширения ASCII в набор включены символы ESC, SI и SO.
Управляющие символы
Стандарт ASCII создавался не только для применения в ЭВМ, но и для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды управления телетайпом. Аналогичные команды имелись и в других докомпьютерных средствах обмена сообщениями, где они применялись с учётом специфики устройства и передавались, например, азбукой Морзе или кодом Бодо. Большинство управляющих символов ASCII вскоре утратило своё назначение и в современных компьютерных системах не используется.
Сообщения, передаваемые по каналу связи, делились на две части: заголовок; текст. «Заголовок» мог содержать адреса отправителя и получателя, контрольную сумму и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.
Символ Код Расшифровка Перевод Описание
null пусто Символ NUL всегда игнорировался. Носителем информации для телетайпов и первых компьютеров была перфолента, на которой единичный бит представлялся наличием кодового отверстия, а нулевой бит — его отсутствием. Участки перфоленты, на которых не была записана информация, не имели кодовых отверстий (то есть содержали символы NUL). Символ NUL по сей день используется в некоторых языках программирования (например, Си) как признак конца строки (термин «строка» обозначает последовательность символов). В некоторых операционных системах NUL — последний символ любого текстового файла.
Во многих языках программирования обозначается как \0.
start of heading начало «заголовка» Символ SOH отмечает данные, не относящиеся к «тексту»: часть потока, содержащую адреса и другие служебные данные (собственно «заголовок»).
start of text начало «текста» Включить печатающее устройство (телетайп). Текст для печати располагался между символами STX и ETX.
end of text конец «текста» Выключить печатающее устройство (телетайп). В наши дни символ ETX используется для отправки процессу сигнала (от — «сигнал-прерывание») и может быть набран нажатием комбинации клавиш . Получив такой сигнал, процесс должен .
end of transmission конец передачи Символ используется эмуляторами терминалов в значении EOF (от — «конец файла») и может быть отправлен нажатием комбинации клавиш . Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в потоке (от — «стандартный поток ввода») этого процесса признак «конец файла». В результате процесс прекратит и начнёт обработку прочитанных данных.
enquiry «Прошу подтверждения!»
acknowledgement «Подтверждаю!» Символ NAK означает обратное: «Не подтверждаю!».
bell звуковой сигнал: звонок Используется для подачи звукового сигнала. Во многих языках программирования обозначается как \a (от ).
backspace возврат на один символ Передаётся при нажатии клавиши . Во многих языках программирования обозначается как \b.
horizontal tab горизонтальная табуляция Во многих языках программирования обозначается как \t.
line feed перевод строки