ASCII
ASCII (англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией; по-американски произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски также произносится [а́ски], и слово ASCII чаще употребляется в женском роде) — 7-битная компьютерная кодировка для представления латинского алфавита, десятичных цифр, некоторых знаков препинания, арифметических операций и управляющих символов. В честь кода ASCII даже был назван небольшой астероид — «3568 ASCII» (открыт в 1936 году, название получил позже).
Наложение символов
Благодаря символу BS (возврат на шаг) на принтере можно печатать
один символ поверх другого. В ASCII было предусмотрено добавление таким
образом диакритики к буквам, например:
a BS ' → áa BS ` → àa BS ^ → âo BS / → øc BS , → çn BS ~ → ñ
(в старых шрифтах апостроф ' рисовался с наклоном вправо, а тильда ~
была сдвинута вверх, так что они как раз подходили на роль акута и
тильды сверху).
Если на символ накладывается тот же символ, то получается эффект
жирного шрифта, а если на символ накладывается подчёркивание, то
получается подчёркнутый текст.
(это используется, например, в справочной системе man).
Национальные варианты ASCII
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤.
Такая система хорошо подходит для европейских языков, где нужны лишь
несколько дополнительных символов. Вариант ASCII без национальных
символов называется US-ASCII, или «International Reference Version».
Для языков с нелатинской письменностью
(русского, греческого, арабского, иврита) существовали более
радикальные модификации ASCII. Одним из вариантов был отказ от строчных
латинских букв — на их месте размещались национальные символы (для
русского и греческого — только заглавные буквы). Другой вариант —
переключение между US-ASCII и национальным вариантом «на лету» с
помощью символов SO (Shift Out) и SI (Shift In) — в этом случае в
национальном варианте можно полностью устранить латинские буквы и
занять всё пространство под свои символы. См. также КОИ-7.
Впоследствии оказалось удобнее использовать 8-битные кодировки, где
нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а
верхнюю (128—255) — разные другие нужные символы. В Юникоде
первые 128 символов тоже совпадают с соответствующими символами
US-ASCII. В настоящее время национальные 7-битные кодировки уже прочно
забыты, и «ASCII» практически всегда означает «US-ASCII».
Кодировка
|
.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 |
TAB |
LF |
VT |
FF |
CR |
SO |
SI |
| 1. |
DLE |
DC1 |
DC2 |
DC3 |
DC4 |
NAK |
SYN |
ETB |
CAN |
EM |
SUB |
ESC |
FS |
GS |
RS |
US |
| 2. |
|
! |
" |
# |
$ |
% |
& |
' |
( |
) |
* |
+ |
, |
— |
. |
/ |
| 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 |
Управляющие символы
-
После названия каждого символа указан его шестнадцатеричный код.
- NUL, 00 — Null, пустой. Всегда игнорировался. На перфолентах
1 представлялась дырочкой, 0 - отсутствием дырочки. Поэтому пустые
части перфоленты до начала и после конца сообщения состояли из таких
символов. Сейчас используется во многих языках программирования
как конец строки. (Строка понимается как последовательность символов.)
В некоторых операционных системах NUL — последний символ любого текстового файла.
- SOH, 01 — Start Of Heading, начало заголовка.
- STX, 02 — Start of Text, начало текста. Текстом называлась часть сообщения, предназначенная для печати. Адрес, контрольная сумма и т. д. входили или в заголовок, или в часть сообщения после текста.
- ETX, 03 — End of Text, конец текста. Здесь телетайп
прекращал печатать. Использование символа Ctrl-C, имеющего код 03, для
прекращения работы чего-то (обычно программы), восходит ещё к тем
временам.
- EOT, 04 — End of Transmission, конец передачи. В системе
UNIX Ctrl-D, имеющий тот же код, означает конец файла при вводе с
клавиатуры.
- ENQ, 05 — Enquire. Прошу подтверждения.
- ACK, 06 — Acknowledgement. Подтверждаю.
- BEL, 07 — Bell, звонок, звуковой сигнал. Сейчас тоже используется. В языках программирования C и C++ обозначается \a.
- BS, 08 — Backspace, возврат на один символ. Сейчас стирает предыдущий символ.
- TAB, 09 — Tabulation. Обозначался также HT — Horizontal Tabulation, горизонтальная табуляция. Во многих языках программирования обозначается \t .
- LF, 0A — Line Feed, перевод строки. Сейчас в конце каждой
строчки текстового файла ставится либо этот символ, либо CR, либо и тот
и другой (CR, затем LF), в зависимости от операционной системы. Во
многих языках программирования обозначается \n и при выводе текста приводит к переводу строки.
- VT, 0B — Vertical Tab, вертикальная табуляция.
- FF, 0C — Form Feed, новая страница.
- CR, 0D — Carriage Return, возврат каретки. Во многих языках
программирования этот символ, обозначаемый \r, можно использовать для
возврата в начало строчки без перевода строки. В некоторых операционных
системах этот же символ, обозначаемый Ctrl-M, ставится в конце каждой
строчки текстового файла перед LF.
- SO, 0E — Shift Out, измени цвет ленты (использовался для
двуцветных лент; цвет менялся обычно на красный). В дальнейшем
обозначал начало использования национальной кодировки.
- SI, 0F — Shift In, обратно к Shift Out.
- DLE, 10 — Data Link Escape, следующие символы имеют специальный смысл.
- DC1, 11 — Device Control 1, 1-й символ управления устройством — включить устройство чтения перфоленты.
- DC2, 12 — Device Control 2, 2-й символ управления устройством — включить перфоратор.
- DC3, 13 — Device Control 3, 3-й символ управления устройством — выключить устройство чтения перфоленты.
- DC4, 14 — Device Control 4, 4-й символ управления устройством — выключить перфоратор.
- NAK, 15 — Negative Acknowledgment, не подтверждаю. Обратно к Acknowledgment.
- SYN, 16 — Synchronization. Этот символ передавался, когда для синхронизации было необходимо что-нибудь передать.
- ETB, 17 — End of Text Block, конец текстового блока. Иногда текст по техническим причинам разбивался на блоки.
- CAN, 18 — Cancel, отмена (того, что было передано ранее).
- EM, 19 — End of Medium, кончилась перфолента и т. д.
- SUB, 1A — Substitute, подставить. Следующий символ — другого
цвета или из дополнительного набора символов. Сейчас Ctrl-Z
используется как конец файла при вводе с клавиатуры в системах DOS и
Windows. У этой функции нет никакой очевидной связи с символом SUB.
- ESC, 1B — Escape. Следующие символы — что-то специальное.
- FS, 1C — File Separator, разделитель файлов.
- GS, 1D — Group Separator, разделитель групп.
- RS, 1E — Record Separator, разделитель записей.
- US, 1F — Unit Separator, разделитель юнитов. То есть
поддерживалось 4 уровня структуризации данных: сообщение могло состоять
из файлов, файлы из групп, группы из записей, записи из юнитов.
- DEL, 7F — Delete, стереть (последний символ). На перфолентах
1 представлялась дырочкой, 0 — отсутствием дырочки. Поэтому символом
DEL, состоящим в двоичном коде из всех единиц, можно было забить любой
символ. Устройства и программы игнорировали DEL так же, как NUL
Структурные свойства таблицы
- Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
- Буквы верхнего и нижнего регистров различаются в своём
представлении только одним битом, что упрощает преобразование регистра
и проверку на диапазон.
Представление ASCII в компьютерах
На подавляющем большинстве современных компьютеров минимально
адресуемая единица памяти — 8-битный байт, поэтому там используются
8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8
бит, просто добавляя 1 нулевой бит в качестве старшего.
На компьютерах системы IBM/360,
однако, в случае использования ASCII применялся другой метод: 6-й бит
(если считать самый младший бит первым) перемещается в 7-й, а бывший
7-й «раздваивается» и копируется и в 8-й бит, и в 6-й. Получается такая
таблица:
|
.0 |
.1 |
.2 |
.3 |
.4 |
.5 |
.6 |
.7 |
.8 |
.9 |
.A |
.B |
.C |
.D |
.E |
.F |
| 0. |
NUL |
SOM |
EOA |
EOM |
EQT |
WRU |
RU |
BELL |
BKSP |
HT |
LF |
VT |
FF |
CR |
SO |
SI |
| 1. |
DC0 |
DC1 |
DC2 |
DC3 |
DC4 |
ERR |
SYNC |
LEM |
S0 |
S1 |
S2 |
S3 |
S4 |
S5 |
S6 |
S7 |
| 2. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4. |
BLANK |
! |
" |
# |
$ |
% |
& |
' |
( |
) |
* |
+ |
, |
— |
. |
/ |
| 5. |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
: |
; |
< |
= |
> |
? |
| 6. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| A. |
@ |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
| B. |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
[ |
\ |
] |
↑ |
← |
| C. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| D. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| E. |
|
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
| F. |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
|
|
|
ESC |
DEL |
(таблица символов приведена по книге G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. "Architecture of the IBM System/360", 1964)
На тех компьютерах, где минимально адресуемой единицей памяти было
36-битное слово, поначалу использовали 6-битные символы (1 слово = 6
символов). После перехода на ASCII на таких компьютерах в одном слове
стали размещать либо 5 семибитных символов (1 бит оставался лишним),
либо 4 девятибитных символа. |