ASCII Media Works
- 1 year ago
- 0
- 0
ASCII ( англ. A merican s tandard c ode for i nformation i nterchange , [ ˈ æ s . k i ] ) — стандарт кодирования знаков латинского алфавита, цифр, некоторых специальных знаков и управляющих последовательностей, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ .
Стандарт ASCII представляет собой семиразрядный код без рекомендаций относительно контроля чётности, содержащий 128 кодовых позиций . Таблица ASCII определяет коды для символов:
Изначально (1963 год) ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; 2 7 =128), а старший бит №7 (нумерация с нуля) использовался для контроля ошибок, возникших при передаче данных. В первой версии кодировались только заглавные буквы. Полосы (группы по 16 символов) № 6 и 7 (нумерация начинается с 0) были зарезервированы для дальнейшего расширения . Велись споры, использовать ли эту область для строчных букв или управляющих символов.
В 1965 году была подготовлена новая редакция ASCII , которая так и не была опубликована . Она не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 — и то без заглавных букв и некоторых символов . Окончательная спецификация была опубликована в 1967 году , и все содержащиеся в ней символы в дальнейшем не меняли своего положения в таблице.
Со временем кодировка была расширена до 256 символов (2 8 =256); коды первых 128 символов не изменились. ASCII стала восприниматься как половина 8-битной кодировки, а «расширенной ASCII» называли ASCII с задействованным 8-м битом (например, КОИ-8 ).
Первая версия ASCII содержала 36 управляющих символов, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, которые подразделяли на группы :
.
,
:
;
!
?
'
"
);
#
$
%
&
@
);
(
)
[
]
);
+
-
*
/
\
=
<
>
)
;
↑
←
).
Cимвол «подушка» (
⌑
), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках
BCDIC
,
и т.д., ни в одну версию ASCII не вошёл.
В версии от 67 года был пересмотрен набор управляющих символов (сокращён до 33), убраны стрелки, но добавлены строчные буквы и семь дополнительных символов:
^
_
`
{
|
}
~
, после чего таблица приняла окончательный вид
:
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | ||||||||||||||||
1. | ||||||||||||||||
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 | { | | | } | ~ |
Все символы в ASCII делятся на 4 группы по 32 символа :
0x
00
…
0x
1F
) — предназначены для управления передачей и выводом текста на терминал
. Группа начинается символом NUL (
0x
00
), означающим незаписанный участок, например перфоленты, и этот символ должен игнорироваться при выводе на экран или на печать
. За пределами группы, в конце таблицы также располагается символ DEL
0x
7F
— участок перфоленты, пробитый целиком, означающий, что символ, который здесь располагался был удалён, а значит его также следует пропустить
;
0x
01
..
0x
07
), форматирование (
0x
08
..
0x
0F
), управление устройством (
0x
10
..
0x
17
) и разделители потоков данных (
0x
18
..
0x
1F
)
. В версии 67 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов
0x
20
— было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале — для корректной работы алгоритмов сортировки
;
!
"
#
$
%
&
'
(
)
), идущие в том порядке, в котором их располагали на пишущих машинках тех лет
, за исключением скобок, которые располагались на позициях
0x
28
и
0x
29
, так как над цифра «0» оказалась под кодовой позицией пробела
. Однако на электромеханических пишущих машинах, в частности
IBM Selectric
расположение этих знаков было иным, что связано с наличием у некоторых из них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от таблицы ASCII положение этих знаков было закреплено в
IBM PC
.
<
и
>
. Знак вопроса также спарен со знаком косой черты как на пишущих машинках
.
@
» (
0x
40
) — предполагалось, что для машин, поставляемых во Францию и Италию этот символ будет заменяться на «
À
». Также, положение заглавных латинских букв и цифр было выбрано из соображений совместимости с
шестибитной кодировкой
DEC SIXBIT. Три позиции после заглавных букв (
0x
5B
,
0x
5C
и
0x
5D
) также предполагалось заменять при необходимости на местные символы.
0x
60
,
0x
7B
,
0x
7C
и
0x
7D
также предполагалось менять на местные при необходимости. В редакции 65-го года был добавлен символ логического отрицания (
¬
,
0x
7C
), который в версии 67-го года был убран.
Важная особенность — ASCII, в отличие, к примеру, от CCITT #2, не использует переключения регистров . Хотя переключение регистров для заглавных букв могло бы уменьшить требуемое количество бит, и соответственно увеличить скорости передачи и уменьшить требуемое место на носителях, однако повышает риск не прочесть сообщение при повреждении . Было решено отказаться от использования регистров и уместить все символы в 7 бит . Тем не менее, в набор включены символы переключения регистра ( , и ) для целей дальнейшего расширения .
С помощью символа Backspace (BS) (возврат на один символ) на принтере можно печатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам диакритические знаки , например:
a BS '
→ á
a BS `
→ à
a BS ^
→ â
o BS /
→ ø
c BS ,
→ ç
n BS ~
→ ñ
Примечание . В старых шрифтах — апостроф «'» рисовался с наклоном влево (сравните: « ` » и « ´ »), а тильда «~» — была сдвинута вверх (сравните: « ~ » и « ˜ »), так что они как раз подходили на роль символов акут «´» и «тильда сверху».
Если в одной позиции дважды напечатать один и тот же символ — получится жирный символ; если в одной позиции напечатать символ, а затем подчёркивание «_» — получится подчёркнутый символ:
a BS a
→
a
a BS _
→
a
Эта техника до сих пор используется, например, в справочной системе
man
.
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять символы « @ », « [ », « \ », « ] », « ^ », « ` », « { », « | », « } », « ~ ». Также на месте знака решётки «#» может быть размещён символ фунта «£» , а на месте символа доллара «$» — знак валюты «¤» . Вариант ASCII, не содержащий национальных символов, называется «US-ASCII» или «international reference version».
Для некоторых языков (с нелатинской письменностью : русский , греческий , арабский , иврит и др.) существовали более радикальные модификации ASCII:
Впоследствии оказалось удобнее использовать 8-битовые кодировки ( кодовые страницы ), в которых нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. Таким образом, (до повсеместного внедрения Юникода ) активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения кириллических символов в таблице ASCII доставляло множество проблем с кодировками ( КОИ-8 , Windows-1251 и др.). Носители других языков с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок.
Первые 128 символов стандарта Юникод совпадают с соответствующими символами US-ASCII.
В первой версии стандарта ASCII (1963 год) — в позициях 0x5e (94) и 0x5f (95) располагались символы «стрелка вверх» и «стрелка влево», соответственно. Стандарт ECMA-6 (1965 год) заменил их на знак вставки и символ подчёркивание «_» , соответственно.
В Советском Союзе стандарт был утвержден в виде таблицы международной ссылочной версии кода КОИ-7 Н0 ГОСТ 27463-87 (СТ СЭВ 356-86) «Системы обработки информации. 7-битные кодированные наборы символов».
Таблица ASCII создавалась для обмена информацией по телетайпу . В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями ( азбука Морзе , семафорная азбука ), учитывая специфику устройства. Большинство управляющих символов ASCII вскоре утратили своё назначение и в современных компьютерных системах не используются.
Примечание: далее в списке — коды символов записаны в шестнадцатеричной системе счисления , после названий символов.
null
всегда игнорировался. На
перфолентах
, цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация — не содержали отверстий (то есть содержали символы
null
)
; такие участки располагались в начале и в конце ленты. Символ
null
по сей день используется во многих
языках программирования
(как признак
конца строки
) и обозначается «
\0
» (термин «
строка
» обозначает последовательность символов). В некоторых
операционных системах
,
null
— последний символ любого
текстового файла
.
Сообщения, передаваемые по каналу связи, делились на две части:
«Заголовок» содержал: адреса отправителя и получателя, контрольную сумму и т. п. ; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.
Символ | Код HEX | Расшифровка | Перевод | Описание |
---|---|---|---|---|
SOH | 01 | s tart o f h eading | начало «заголовка» | Символ начала заголовка (SOH) отмечает разделение данных, не относящийся к данным: часть потока, содержащую адреса и другие служебные данные. |
STX | 02 | s tart of t e x t | начало «текста» |
Включить печатающее устройство (телетайп). Текст для печати располагался между символами
«
STX
»
и
«
ETX
».
|
ETX | 03 | e nd of t e x t | конец «текста» |
Выключить печатающее устройство (телетайп). В наши дни код
«
03
»
используется для отправки
процессу
сигнала
«SIGINT»
(сигнал-прерывание:
англ.
sig
nal
int
errupt
) и может быть набран нажатием комбинации клавиш
Ctrl
+
C
. Получив такой сигнал, процесс должен
.
|
EOT | 04 | e nd o f t ransmission | конец передачи | Символ используется эмуляторами терминалов в значении « Конец файла » ( EOF: англ. e nd o f f ile ) и может быть отправлен нажатием комбинации клавиш Ctrl + D . Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в стандартном потоке ввода этого процесса ( stdin : англ. st andar d in put stream ) флаг «Конец файла». В результате процесс прекратит stdin и начнёт обработку прочитанных данных. |
ENQ | 05 | enq uire | «Прошу подтверждения!» | |
ACK | 06 | ack nowledgement | «Подтверждаю!» |
Символ
«
NAK
»
означает обратное:
«Не подтверждаю!».
|
BEL | 07 | bel l | звуковой сигнал : звонок | Символ часто обозначается как «\a» и используется для подачи звукового сигнала. |
BS | 08 | b ack s pace | возврат на один символ | Передаётся при нажатии клавиши ← Backspace . |
TAB | 09 | tab ulation | горизонтальная табуляция |
Обозначается как «
\t
». Иногда называется «
HT
» (от
англ.
h
orizontal
t
abulation
).
|
LF | 0A | l ine f eed | перевод строки |
Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем:
Во многих языках программирования символ обозначается как «
\n
». Многие
терминалы
70-80-х годов содержали переключатель поведения клавиши
↵ Return
, позволяющий посылать при нажатии на неё либо последовательность
|
VT | 0B | v ertical t ab | вертикальная табуляция | |
FF | 0C | f orm f eed | «прогон страницы», новая страница | Команда для принтера : продолжить печать с начала следующего листа. |
CR | 0D | c arriage r eturn | возврат каретки |
Команда для принтера: продолжить печать с начала текущей строки (
не
с новой строки). Во многих языках программирования — символ «
CR
» обозначается как «
\r
». В
операционной системе
«Mac»
— символ «
CR
»
(в прошлом) обозначал конец строки текстового файла. С клавиатуры символ «
CR
»может быть введён нажатием комбинации клавиш:
Ctrl
+
M
.
|
SO | 0E | s hift o ut | «Переключиться на другую ленту (кодировку)» | Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку. |
SI | 0F | s hift i n | «Переключиться на исходную ленту (кодировку)» |
Команда для выполнения действия, обратного действию «
SO
».
|
DLE | 10 | d ata l ink e scape | «Экранирование канала данных» |
Любые символы, следующие после «
DLE
», должны восприниматься как
данные
, а не как управляющие символы.
|
DC1 | 11 | d evice c ontrol 1 | Первый символ управления устройством | Команда включить устройство чтения перфоленты . |
DC2 | 12 | d evice c ontrol 2 | Второй символ управления устройством | Команда включить . |
DC3 | 13 | d evice c ontrol 3 | Третий символ управления устройством | Команда выключить устройство чтения перфоленты. |
DC4 | 14 | d evice c ontrol 4 | Четвёртый символ управления устройством | Команда выключить перфоратор. |
NAK | 15 | n egative a c k nowledgment | «Не подтверждаю!» |
Обратно символу «
ACK
».
|
SYN | 16 | syn chronization | Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать. | |
ETB | 17 | e nd of t ext b lock | конец текстового блока | Иногда текст (по техническим причинам) разбивался на блоки. |
CAN | 18 | can cel | «Отмена» | Отмена того, что было передано ранее. |
EM | 19 | e nd of m edium | «Конец носителя» | Кончилась перфолента, бумага — и т. п. |
SUB | 1A | sub stitute | «Подставить» |
Символ ставится:
В настоящее время символ вставляется нажатием комбинации клавиш Ctrl + Z и используется для обозначения конца файла в операционных системах «DOS» и «Windows» . |
ESC | 1B | esc ape |
Знак того, что символ, следующий после «
ESC
», имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа «
ESC
» следуют
управляющие последовательности
; в операционной системе
«DOS»
они реализуются драйвером
«ANSI.SYS»
.
|
|
DEL | 7F | del ete | стереть последний символ |
Символом «
DEL
» (состоящим в двоичном коде из всех единиц) можно было «забить» любой символ. Устройства и программы игнорировали «
DEL
» так же, как и «
NUL
».
Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте : в них удаление символа происходило «забиванием» его кода дырочками (обозначавшими логические единицы ). |
Поддерживалось разделение данных на 4 уровня:
Символ | Код | Расшифровка | Перевод | Описание |
---|---|---|---|---|
FS | 1C | f ile s eparator | разделитель файлов | сообщение могло состоять из файлов |
GS | 1D | g roup s eparator | разделитель групп | файлы могли состоять из групп |
RS | 1E | r ecord s eparator | разделитель записей | группы могли состоять из записей |
US | 1F | u nit s eparator | разделитель юнитов | записи могли состоять из юнитов |
На подавляющем большинстве современных компьютеров, минимально адресуемая единица памяти — байт (размером в 8 бит ); поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.
На компьютерах IBM/360 применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й . Такую кодировку называли USASCII-8
.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. | DC 0 | DC 1 | DC 2 | DC 3 | DC 4 | ERR | SYNC | LEM | S 0 | S 1 | S 2 | S 3 | S 4 | S 5 | S 6 | S 7 |
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 |
На компьютерах с минимально адресуемой единицей памяти в 36 бит — поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитовых символов (1 бит оставался лишним), либо 4 девятибитовых символа.
Расположение символов ASCII на клавиатуре согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей ⇧ Shift , а управляющие символы — с Ctrl ,
Коды ASCII используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам). Для раскладки клавиатуры QWERTY — таблица кодов выглядит так, как показано в следующей таблице .