ASCII (англ. American standard code for information interchange, [ˈæs.ki][1]) — стандарт кодирования знаков латинского алфавита, цифр, некоторых специальных знаков и управляющих последовательностей, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ[2].

ASCII
Орган стандартизацииНациональный институт стандартов США
Логотип Викисклада Медиафайлы на Викискладе

Описание

Таблица ASCII

Стандарт ASCII представляет собой семиразрядный код без рекомендаций относительно контроля чётности, содержащий 128 кодовых позиций[3]. Таблица ASCII определяет коды для символов:

История

С развитием вычислительной техники и языков программирования, возможностей международного телеграфного кода стало не хватать, что вынуждало производителей ЭВМ придумывать свои расширения или собственные коды. Кроме того, для записи на перфокарты использовались различные варианты кода Холлерита. Таким образом 1960-х годов существовало достаточно большое количество таблиц кодирования латинских символов как для передачи по линиям связи, так и для записи на магнитную ленту, перфоленту и перфокарты: такие, как CCITT #2, FIELDATA, BCDIC, IPC и т.д.[4][2], причём даже в рамках одной кодовой таблицы один код мог соответствовать разным символам в зависимости от конкретной модели устройства и его назначения. Чтобы решить эту проблему 4 августа 1960 года был созван комитет X3.2, как часть комитета X3, сформированного в в январе того же года. В этот комитет входили представители компаний IBM (в частности Боб Бемер[en]), AT&T и Bell Labs и других. После долгих дебатов в 1963 году была принята первая версия стандарта ASCII[5].

Изначально ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; 27=128), а старший бит №7 (нумерация с нуля) использовался для контроля ошибок, возникших при передаче данных. В первой версии кодировались только заглавные буквы. Полосы (группы по 16 символов) № 6 и 7 (нумерация начинается с 0) были зарезервированы для дальнейшего расширения[6]. Велись споры, использовать ли эту область для строчных букв или управляющих символов.

В 1965 году была подготовлена новая редакция ASCII[7], которая так и не была опубликована[8]. Она не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 — и то без заглавных букв и некоторых символов[9]. Окончательная спецификация была опубликована в 1967 году[10][11], и все содержащиеся в ней символы в дальнейшем не меняли своего положения в таблице.

В целом, компания IBM долгое время саботировала внедрение ASCII, предпочтя собственную кодовую таблицу EBCDIC, основанную на коде Холлерита[5].

Со временем кодировка была расширена до 256 символов (28=256); коды первых 128 символов не изменились. ASCII стала восприниматься как половина 8-битной кодировки, а «расширенной ASCII» называли ASCII с задействованным 8-м битом (например, КОИ-8).

Структурные свойства таблицы

Первая версия ASCII содержала 36 управляющих символов, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, которые подразделяли на группы[12]:

  • 8 знаков препинания (.,:;!?'");
  • 5 знаков для финансовых и биржевых операций (#$%&@);
  • 2 пары скобок (()[]);
  • 8 математических символов (+-*/\=<>)[13];
  • 2 стрелки для блок-схем: ().

Cимвол «подушка» (), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках BCDIC, Fieldata[en] и т.д., ни в одну версию ASCII не вошёл.

В версии от 67 года был пересмотрен набор управляющих символов (сокращён до 33), убраны стрелки, но добавлены строчные буквы и семь дополнительных символов: ^_`{|}~, после чего таблица приняла окончательный вид[14]:

Таблица ASCII
 .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
0.NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI
1.DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS
2.   !"#$%&'()*+,-./
3.0123456789:;<=>?
4.@ABCDEFGHIJKLMNO
5.PQRSTUVWXYZ[\]^_
6.`abcdefghijklmno
7.pqrstuvwxyz{|}~DEL

Все символы в ASCII делятся на 4 группы по 32 символа[15]:

  1. #Управляющие символы (0x000x1F) — предназначены для управления передачей и выводом текста на терминал[16]. Группа начинается символом NUL (0x00), означающим незаписанный участок, например перфоленты, и этот символ должен игнорироваться при выводе на экран или на печать[17]. За пределами группы, в конце таблицы также располагается символ DEL 0x7F — участок перфоленты, пробитый целиком, означающий, что символ, который здесь располагался был удалён, а значит его также следует пропустить[17][18];
    • Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей (0x01..0x07), форматирование (0x08..0x0F), управление устройством (0x10..0x17) и разделители потоков данных (0x18..0x1F)[19]. В версии 67 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов
  2. Группа цифр и основных знаков препинания — делится на две подгруппы, соответствующие верхнему и нижнему регистру.
    • Группа начинается с пробела 0x20 — было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале — для корректной работы алгоритмов сортировки[20];
    • Цифры идут во второй подгруппе — такое решение было принято для того, чтобы их легко было преобразовать в Двоично-десятичный код, убрав старшие 4 бита — и обратно, прибавив префикс 00112: например цифра 5 имеет код 0011 01012. По этой причине цифры невозможно было разместить в первой подгруппе, так как в ней первым идёт пробел[21]. Другая причина расположения цифр в этой группе — было необходимо, чтобы при сортировке большинство знаков препинания располагались раньше цифр и букв[22];
    • 9 символов после пробела — знаки препинания (!"#$%&'()), идущие в том порядке, в котором их располагали на пишущих машинках тех лет[12], за исключением скобок, которые располагались на позициях 0x28 и 0x29, так как над цифра «0» оказалась под кодовой позицией пробела[23]. Однако на электромеханических пишущих машинах, в частности IBM Selectric расположение этих знаков было иным, что связано с наличием у некоторых из них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от таблицы ASCII положение этих знаков было закреплено в IBM PC.
    • Символы точки и запятой в пишущих машинках тех лет дублировались в обоих регистрах. В ASCII было решено не дублировать знаки, а заполнить освободившееся место символами < и >[24]. Знак вопроса также спарен со знаком косой черты как на пишущих машинках[12].
  3. Группа заглавных букв начинается с символа «@» (0x40) — предполагалось, что для машин, поставляемых во Францию и Италию этот символ будет заменяться на «À». Также, положение заглавных латинских букв и цифр было выбрано из соображений совместимости с шестибитной кодировкой DEC SIXBIT. Три позиции после заглавных букв (0x5B, 0x5C и 0x5D) также предполагалось заменять при необходимости на местные символы.
  4. Группа строчных букв появилась в ASCII-1965, но была пересмотрена в ASCII-1967. Все строчные буквы расположены так же, как в соответствующие заглавные, что позволяет переключать регистр, изменяя лишь старший бит. Позиции 0x60, 0x7B, 0x7C и 0x7D также предполагалось менять на местные при необходимости. В редакции 65-го года был добавлен символ логического отрицания (¬,0x7C), который в версии 67-го года был убран.

Важная особенность — ASCII, в отличие, к примеру, от CCITT #2, не использует переключения регистров[22]. Хотя переключение регистров для заглавных букв могло бы уменьшить требуемое количество бит, и соответственно увеличить скорости передачи и уменьшить требуемое место на носителях, однако повышает риск не прочесть сообщение при повреждении[25]. Было решено отказаться от использования регистров и уместить все символы в 7 бит[22]. Тем не менее, в набор включены символы переключения регистра (ESC, SI и SO) для целей дальнейшего расширения[25].

Наложение символов

С помощью символа Backspace (BS) (возврат на один символ) на принтере можно печатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам диакритические знаки, например:

  • a BS ' → á
  • a BS ` → à
  • a BS ^ → â
  • o BS / → ø
  • c BS , → ç
  • n BS ~ → ñ

Примечание. В старых шрифтахапостроф «'» рисовался с наклоном влево (сравните: «`» и «´»), а тильда «~» — была сдвинута вверх (сравните: «~» и «˜»), так что они как раз подходили на роль символов акут «´» и «тильда сверху».

Если в одной позиции дважды напечатать один и тот же символ — получится жирный символ; если в одной позиции напечатать символ, а затем подчёркивание «_» — получится подчёркнутый символ:

  • a BS aa
  • a BS _a

Эта техника до сих пор используется, например, в справочной системе man.

Национальные варианты ASCII

Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять символы «@», «[», «\», «]», «^», «`», «{», «|», «}», «~». Также на месте знака решётки «#» может быть размещён символ фунта «£», а на месте символа доллара «$» — знак валюты «¤». Вариант ASCII, не содержащий национальных символов, называется «US-ASCII» или «international reference version».

Для некоторых языков (с нелатинской письменностью: русский, греческий, арабский, иврит и др.) существовали более радикальные модификации ASCII:

  • В одной из таких модификаций — на месте строчных латинских букв размещались национальные символы (для русского и греческого — заглавные буквы).
  • В другой модификации — предусматривалось переключение между US-ASCII и национальным вариантом; переключение осуществлялось «на лету»: с помощью символов «SO» (англ. shift out) и «SI» (англ. shift in); в этом случае — в национальном варианте можно было полностью заменить латинские буквы на национальные символы. См. также: КОИ-7.

Впоследствии оказалось удобнее использовать 8-битовые кодировки (кодовые страницы), в которых нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. Таким образом, верхняя половина таблицы ASCII (до повсеместного внедрения Юникода) активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения кириллических символов в таблице ASCII доставляло множество проблем с кодировками (КОИ-8, Windows-1251 и др.). Носители других языков с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок.

Первые 128 символов стандарта Юникод совпадают с соответствующими символами US-ASCII.

В первой версии стандарта ASCII (1963 год) — в позициях 0x5e (94) и 0x5f (95) располагались символы «стрелка вверх» и «стрелка влево», соответственно. Стандарт ECMA-6 (1965 год) заменил их на знак вставки и символ подчёркивание «_», соответственно.

В Советском Союзе стандарт был утвержден в виде таблицы международной ссылочной версии кода КОИ-7 Н0 ГОСТ 27463-87 (СТ СЭВ 356-86) «Системы обработки информации. 7-битные кодированные наборы символов».[26]

Управляющие символы

Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывая специфику устройства. Большинство управляющих символов ASCII вскоре утратили своё назначение и в современных компьютерных системах не используются.

Примечание: далее в списке — коды символов записаны в шестнадцатеричной системе счисления, после названий символов.

  • , 00 — null («пустой»). Символ null всегда игнорировался. На перфолентах, цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация — не содержали отверстий (то есть содержали символы null); такие участки располагались в начале и в конце ленты. Символ null по сей день используется во многих языках программирования (как признак конца строки) и обозначается «\0» (термин «строка» обозначает последовательность символов). В некоторых операционных системах, null — последний символ любого текстового файла.

Сообщения, передаваемые по каналу связи, делились на две части:

  • Заголовок;
  • Текст.

«Заголовок» содержал: адреса отправителя и получателя, контрольную сумму и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.

СимволКод HEXРасшифровкаПереводОписание
01start of headingначало «заголовка»Символ начала заголовка (SOH) отмечает разделение данных, не относящийся к данным: часть потока, содержащую адреса и другие служебные данные.
02start of textначало «текста»Включить печатающее устройство (телетайп). Текст для печати располагался между символами «STX» и «ETX».
03end of textконец «текста»Выключить печатающее устройство (телетайп). В наши дни код «03» используется для отправки процессу сигнала «SIGINT» (сигнал-прерывание: англ. signal interrupt) и может быть набран нажатием комбинации клавиш Ctrl+C. Получив такой сигнал, процесс должен завершить работу[en].
04end of transmissionконец передачиСимвол используется эмуляторами терминалов в значении «Конец файла» (EOF: англ. end of file) и может быть отправлен нажатием комбинации клавиш Ctrl+D. Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в стандартном потоке ввода этого процесса (stdin: англ. standard input stream) флаг «Конец файла». В результате процесс прекратит чтение[en] stdin и начнёт обработку прочитанных данных.
05enquire«Прошу подтверждения!»
06acknowledgement«Подтверждаю!»Символ «NAK» означает обратное: «Не подтверждаю!».
07bellзвуковой сигнал: звонокСимвол часто обозначается как «\a» и используется для подачи звукового сигнала.
08backspaceвозврат на один символПередаётся при нажатии клавиши Backspace.
09tabulationгоризонтальная табуляцияОбозначается как «\t». Иногда называется «HT» (от англ. horizontal tabulation).
0Aline feedперевод строкиКоманда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем:
  • в «UNIX» — одиночный символ «LF»;
  • в ранних версиях MacOS и некоторых ОС домашних компьютеров — одиночный символ «CR»;
  • в «Windows» — последовательность символов «CR LF».

Во многих языках программирования символ обозначается как «\n». Многие терминалы 70-80-х годов содержали переключатель поведения клавиши ↵ Return, позволяющий посылать при нажатии на неё либо последовательность CR LF, либо только CR.

0Bvertical tabвертикальная табуляция
0Cform feed«прогон страницы», новая страницаКоманда для принтера: продолжить печать с начала следующего листа.
0Dcarriage returnвозврат кареткиКоманда для принтера: продолжить печать с начала текущей строки (не с новой строки). Во многих языках программирования — символ «CR» обозначается как «\r». В операционной системе «Mac» — символ «CR» (в прошлом) обозначал конец строки текстового файла. С клавиатуры символ «CR»может быть введён нажатием комбинации клавиш: Ctrl+M.
0Eshift out«Переключиться на другую ленту (кодировку)»Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку.
0Fshift in«Переключиться на исходную ленту (кодировку)»Команда для выполнения действия, обратного действию «SO».
10data link escape«Экранирование канала данных»Любые символы, следующие после «DLE», должны восприниматься как данные, а не как управляющие символы.
11device control 1Первый символ управления устройствомКоманда включить устройство чтения перфоленты.
12device control 2Второй символ управления устройствомКоманда включить перфоратор.
13device control 3Третий символ управления устройствомКоманда выключить устройство чтения перфоленты.
14device control 4Четвёртый символ управления устройствомКоманда выключить перфоратор.
15negative acknowledgment«Не подтверждаю!»Обратно символу «ACK».
16synchronizationЭтот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать.
17end of text blockконец текстового блокаИногда текст (по техническим причинам) разбивался на блоки.
18cancel«Отмена»Отмена того, что было передано ранее.
19end of medium«Конец носителя»Кончилась перфолента, бумага — и т. п.
1Asubstitute«Подставить»Символ ставится:
  • На месте символа, значение которого было потеряно (или испорчено) при передаче;
  • Перед символом, для интерпретации которого нужно переключиться на дополнительный набор символов;
  • Перед символом, печатать который нужно другим цветом...

В настоящее время символ вставляется нажатием комбинации клавиш Ctrl+Z и используется для обозначения конца файла в операционных системах «DOS» и «Windows».

1BescapeЗнак того, что символ, следующий после «ESC», имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа «ESC» следуют управляющие последовательности; в операционной системе «DOS» они реализуются драйвером «ANSI.SYS».
7Fdeleteстереть последний символСимволом «DEL» (состоящим в двоичном коде из всех единиц) можно было «забить» любой символ. Устройства и программы игнорировали «DEL» так же, как и «NUL».

Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило «забиванием» его кода дырочками (обозначавшими логические единицы).

Поддерживалось разделение данных на 4 уровня:

СимволКодРасшифровкаПереводОписание
1Cfile separatorразделитель файловсообщение могло состоять из файлов
1Dgroup separatorразделитель группфайлы могли состоять из групп
1Erecord separatorразделитель записейгруппы могли состоять из записей
1Funit separatorразделитель юнитовзаписи могли состоять из юнитов

Представление ASCII в ЭВМ

На подавляющем большинстве современных компьютеров, минимально адресуемая единица памяти — байт (размером в 8 бит); поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.

USASCII-8

На компьютерах IBM/360 применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й[27]. Такую кодировку называли USASCII-8[28]

 .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
0.NULSOMEOAEOMEQTWRURUBELLBKSPHTLFVTFFCRSOSI
1.DC0DC1DC2DC3DC4ERRSYNCLEMS0S1S2S3S4S5S6S7
2.                
3.                
4.BLANK!"#$%&'()*+,-./
5.0123456789:;<=>?
6.                
7.                
8.                
9.                
A.@ABCDEFGHIJKLMNO
B.PQRSTUVWXYZ[\]
C.                
D.                
E. abcdefghijklmno
F.pqrstuvwxyz   ESCDEL

На компьютерах с минимально адресуемой единицей памяти в 36 бит — поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитовых символов (1 бит оставался лишним), либо 4 девятибитовых символа.

Ввод с клавиатуры

Расположение символов ASCII на клавиатуре согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей ⇧ Shift, а управляющие символы — с Ctrl,[29]

!
1
"
2
#
3
$
4
%
5
&
6
'
7
(
8
)
9

0
=
-
~ ␞
^
¦ ␜
\
BS
ESC
Q ␑
q
W ␗
w
E ␅
e
R ␒
r
T ␔
t
Y ␙
y
U ␕
u
I ␉
i
O ␏
o
P ␐
p
` ␀
@
{ ␛
[
_ ␟
Ctrl
A ␁
a
S ␓
s
D ␄
d
F ␆
f
G ␇
g
H ␈
h
J ␊
j
K ␋
k
L ␌
l
+
;
*
:
} ␝
]
CR
Shift
Z ␚
z
X ␘
x
C ␃
c
V ␖
v
B ␂
b
N ␎
n
M ␍
m
<
,
>
.
?
/
Shift
LF

Коды ASCII используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам). Для раскладки клавиатуры QWERTY — таблица кодов выглядит так, как показано в следующей таблице[30].

27
112
113
114
115
116
117
118
119
120
121
122
123
44
145
19
192
49
50
51
52
53
54
55
56
57
48
189
187
8
45
36
33
144
111
106
109
9
81
87
69
82
84
89
85
73
79
80
219
221
13
46
35
34
103
104
105
107
20
65
83
68
70
71
72
74
75
76
186
222
220
100
101
102
16
226
90
88
67
86
66
78
77
188
190
191
16
38
97
98
99
13
17
91
18
32
18
92
93
17
37
40
39
96
110

См. также

Примечания

Литература

  • ANSI X3.4-1963 Code for Information Interchange
  • ANSI X3.4-1965 Code for Information Interchange
  • ANSI X3.4-1967 Code for Information Interchange
  • ANSI X3.4-1977 Code for Information Interchange

Ссылки

  • Charles E. Mackenzie. Coded Character Sets, History and Development (англ.). — Addison-Wesley Publishing Company, inc, 1980. — ISBN 0-201-14460-3.
  • Fischer, Eric The Evolution of Character Codes, 1874–1968 (англ.) 14–15 (Table 35) (20 июня 2000). Дата обращения: 30 ноября 2022. Архивировано 30 ноября 2022 года.
  • Толковый словарь по вычислительным системам / Под редакцией В. Иллингуорта и др.: Пер. с английского А.К. Белоцкого и др.; Под редакцией Е.К. Масловского. — М.: Машиностроение, 1990. — ISBN 5-217-00617-X.
  • Standard ECMA-6: 7-bit coded character set. 6th edition (англ.). Ecma international (декабрь 1991). Архивировано 23 августа 2011 года.
  • Tom Jennings. An annotated history of some character codes or ASCII. American standard code for information infiltration (англ.) (29 октября 2004). Архивировано 17 июля 2011 года.
  • ASCII chart and other resources (англ.). JimPrice.Com.
🔥 Top keywords: Заглавная страницаЯндексДуров, Павел ВалерьевичСлужебная:ПоискYouTubeЛунин, Андрей АлексеевичПодносова, Ирина ЛеонидовнаВКонтактеФоллаут (телесериал)WildberriesTelegramРеал Мадрид (футбольный клуб)Богуславская, Зоя БорисовнаДуров, Валерий СемёновичРоссияXVideosСписок умерших в 2024 годуЧикатило, Андрей РомановичFallout (серия игр)Список игроков НХЛ, забросивших 500 и более шайбПопков, Михаил ВикторовичOzon17 апреляИльин, Иван АлександровичMail.ruСёгун (мини-сериал, 2024)Слово пацана. Кровь на асфальтеПутин, Владимир ВладимировичЛига чемпионов УЕФАГагарина, Елена ЮрьевнаБишимбаев, Куандык ВалихановичЛига чемпионов УЕФА 2023/2024Турнир претендентов по шахматам 2024Манчестер СитиMGM-140 ATACMSРоссийский миротворческий контингент в Нагорном КарабахеЗагоризонтный радиолокаторПинапВодительское удостоверение в Российской Федерации