ASCII

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Таблица ASCII

ASCII (англ. American standard code for information interchange) — название таблицы (кодировки, набора), в которой некоторым распространённым печатным и не печатным символам сопоставлены числовые коды. Таблица была разработана и стандартизована в США в 1963 году. Название «ASCII» в американском варианте английского языка произносится как [э́ски]; в Великобритании чаще произносят [а́ски]; по-русски — так же: [а́ски] или [аски́].

Таблица ASCII определяет коды для символов:

История[править | править вики-текст]

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

Наложение символов[править | править вики-текст]

Благодаря символу 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 без национальных символов называется 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
  .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.     ! " # $ % & ' ( ) * + , - . /
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

Символ 0x5e в первой версии стандарта ASCII (1963 год) соответствовал стрелке вверх, а символ 0x5f — стрелке влево. Стандарт ECMA-6 (1965 год) заменил их на знак вставки (используемый также в роли циркумфлекса) и нижнюю черту (подчёркивание) соответственно.

Управляющие символы[править | править вики-текст]

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

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

  • NUL, 00 — null, пустой. Символ null всегда игнорировался. На перфолентах цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация, не содержали отверстий, то есть содержали символы null; такие участки располагались в начале и в конце ленты. Символ null по сей день используется во многих языках программирования, как признак конца строки, и обозначается «\0». (Термин «строка» обозначает последовательность символов.) В некоторых операционных системах null — последний символ любого текстового файла.
  • SOH, 01 — start of heading, начало заголовка.
  • STX, 02 — start of text, начало текста. Термином «текст» называлась часть сообщения, предназначенная для печати. До «текста» записывался «заголовок». Заголовок содержал адреса отправителя и получателя, контрольную сумму и т. п., мог добавляться до «текста» или после. После получения символа stx телетайп мог начать печать сообщения.
  • ETX, 03 — end of text, конец текста. Символ использовался для выключения печатающего устройства телетайпа. В наши дни код 03 до сих пор используется для остановки программ (точнее, для отправки сигнала SIGINT), может быть послан нажатием омбинации клавиш  Ctrl  +  C .
  • EOT, 04 — end of transmission, конец передачи. В ОС UNIX нажатие комбинации клавиш  Ctrl  +  D  посылает код, означающий «конец файла».
  • ENQ, 05 — enquire. «Прошу подтверждения».
  • ACK, 06 — acknowledgement. «Подтверждаю».
  • BEL, 07 — bell, звонок, звуковой сигнал. Символ до сих пор используется, а в языках программирования C и C++ обозначается как «\a».
  • BS, 08 — backspace, возврат на один символ. Клавиша  ← Backspace  служит для стирания предыдущего символа.
  • TAB, 09 — tab, горизонтальная табуляция.
  • LF, 0A — line feed, перевод строки. Символ используется для обозначения конца строки текстового файла в ОС UNIX. Последовательность символов CR LF обозначает конец строки текстового файла в ОС Windows. Символ во многих языках программирования обозначается как «\n». Нажатие на клавишу  ↵ Enter  при выводе текста приводит к переводу строки.
  • VT, 0B — vertical tab, вертикальная табуляция.
  • FF, 0C — form feed, прогон страницы, новая страница. Команда для принтера: продолжить печать с начала следующего листа.
  • CR, 0D — carriage return, возврат каретки. Команда для принтера: продолжить печать с начала текущей строки (не с новой строки). Во многих языках программирования символ cr обозначаетеся как «\r». В ОС Mac OS символ cr обозначает конец строки текстового файла. С клавиатуры символ cr может быть введёт нажатием комбинации клавиш  Ctrl  +  M .
  • 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 и Linux. У этой функции нет никакой очевидной связи с символом SUB.
  • ESC, 1B — escape. Следующие за ним символы имеют какое-то другое значение, отличное от того, которое определено в ASCII. Обычно после символа esc следуют управляющие последовательности.
  • FS, 1C — file separator, разделитель файлов.
  • GS, 1D — group separator, разделитель групп.
  • RS, 1E — record separator, разделитель записей.
  • US, 1F — unit separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
  • DEL, 7F — delete, стереть последний символ. Символом del, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали del так же, как и null. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).

Структурные свойства таблицы[править | править вики-текст]

  • Коды символов цифр «0»—«9» в двоичной системе счисления начинаются с 00112, а заканчиваются двоичными значениями чисел. Например, 01012 — число 5, а 0011 01012 — символ «5». Зная об этом, можно преобразовать двоично-десятичные числа (BCD) в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
  • Буквы «A»-«Z» верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на принадлежность кода к диапазону значений. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит 01002 (для букв верхнего регистра) или 01102 (для букв нижнего регистра).

Представление ASCII в ЭВМ[править | править вики-текст]

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

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

  .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

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

Коды ASCII используются также для определения нажатой клавиши при программировании. Для раскладки клавиатуры QWERTY таблица кодов выглядит так, как показано в следующей таблице.

Escape

27


F1

112

F2

113

F3

114

F4

115

F5

116

F6

117

F7

118

F8

119

F9

120

F10

121

F11

122

F12

123

Print Screen

Scroll Lock

145

Pause

19


192

1

49

2

50

3

51

4

52

5

53

6

54

7

55

8

56

9

57

0

48

-

189

=+

187

Back Space

8

Insert

45

Home

36

Page Up

33

Num Lock

144

/ доп.

111

* доп.

106


+ доп.

107

Tab

9

Q

81

W

87

E

69

R

82

T

84

Y

89

U

85

I

73

O

79

P

80

[

219

]

221


Delete

46

End

35

Page Down

34

7 доп.

103

8 доп.

104

9 доп.

105

Caps Lock

20

A

65

S

83

D

68

F

70

G

71

H

72

J

74

K

75

L

76

186

222

Enter

13




4 доп.

100

5 доп.

101

6 доп.

102



Enter доп.


13

Shift

16

Z

90

X

88

C

67

V

86

B

66

N

78

M

77

,<

188

.>

190

/

191

Shift

16

\|

220



Up

38


1 доп.

97

2 доп.

98

3 доп.

99

Ctrl

17

win


Alt

18

Space Bar

32

Alt

18

win

list

Ctrl

17


Left

37

Down

40

Right

39

Ins/0

45/96

Del/.

46/110

Примечание[править | править вики-текст]

  1. Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]


Кодировки символов
Основы алфавиттекстфайлданные ) • набор символовконверсия
Исторические кодировки Докомп.: семафорная (Макарова)МорзеБодоМТК-2
Комп.: 6-битнаяУППRADIX-50EBCDICДКОИ-8 ) • КОИ-7ISO 646
современное
8-битное
представление
символы ASCIIуправляющиепечатные ) • не-ASCIIпсевдографика )
8-битные код.стр. Кириллица: КОИ-8ГОСТ 19768-87MacCyrillic
ISO 8859 1 (лат.)2345 (кир.)6789101112131415 (€)16
Windows 12501251 (кир.)1252125312541255125612571258WGL4
IBM & DOS 437850852855866 «альт.»МИКНИИ ЭВМ
Многобайтные Традиционные DBCSGB2312 ) • HTML
Unicode UTF-32UTF-16UTF-8список символовкириллица )
Связанные темы интерфейс пользователяраскладка клавиатурылокальперевод строкишрифткракозябрытранслитнестандартные шрифтытекст как изображение
Утилиты iconvrecode