У этого термина существуют и другие значения, см. ASCII (значения).
ASCII
ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной кодовой таблицы (например КОИ-8).
Содержание
1 Наложение символов
2 Национальные варианты ASCII
3 Кодировка
4 Управляющие символы
5 Структурные свойства таблицы
6 Представление ASCII в ЭВМ
7 Примечание
8 См. ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант 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.
Кодировка
.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.
_
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 изначально предназначался для обмена информацией (по телетайпу), в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства.
(После названия каждого символа указан его 16-ричный код)
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. Следующие за ним символы имеют какое-то другое значение, отличное от того, которое определено в ASCII. Обычно начинал управляющие последовательности.
FS, 1C — File Separator, разделитель файлов.
GS, 1D — Group Separator, разделитель групп.
RS
, 1E — Record Separator, разделитель записей.
US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
DEL, 7F — Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).
Структурные свойства таблицы
Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит 1002 (для букв верхнего регистра) или 1102 (для букв нижнего регистра).
Представление 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 доп.
109
8 доп.
108
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
Примечание
↑ G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. Architecture of the IBM System/360, 1964
См. также
Переносимый набор символов
Управляющие символы
EBCDIC
ISCII
VISCII
YUSCII
Юникод
ASCII art
КОИ-8
Ссылки
Цветная таблица ASCII
Standard ECMA-6: 7-bit Coded Character Set, 6th edition (англ.). Ecma International (December 1991). Архивировано из первоисточника 23 августа 2011.
Tom Jennings An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration (англ.) (1999-09-16 — 2004-10-29). Архивировано из первоисточника 23 августа 2011.
ASCII Chart and Other Resources (англ.). JimPrice.Com.
Кодировки символов
Основы →
алфавит • текст ( файл • данные ) • набор символов • конверсия
интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • кракозябры • транслит • нестандартные шрифты • текст как изображение
Утилиты: iconv • recode
ASCII | это.
.. Что такое ASCII?
У этого термина существуют и другие значения, см. ASCII (значения).
ASCII
ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной кодовой таблицы (например КОИ-8).
Содержание
1 Наложение символов
2 Национальные варианты ASCII
3 Кодировка
4 Управляющие символы
5 Структурные свойства таблицы
6 Представление ASCII в ЭВМ
7 Примечание
8 См. ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант 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.
Кодировка
.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.
_
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 изначально предназначался для обмена информацией (по телетайпу), в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства.
(После названия каждого символа указан его 16-ричный код)
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. Следующие за ним символы имеют какое-то другое значение, отличное от того, которое определено в ASCII. Обычно начинал управляющие последовательности.
FS, 1C — File Separator, разделитель файлов.
GS, 1D — Group Separator, разделитель групп.
RS, 1E — Record Separator, разделитель записей.
US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
DEL, 7F — Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).
Структурные свойства таблицы
Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит 1002 (для букв верхнего регистра) или 1102 (для букв нижнего регистра).
Представление 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 доп.
109
8 доп.
108
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
Примечание
↑ G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. Architecture of the IBM System/360, 1964
См. также
Переносимый набор символов
Управляющие символы
EBCDIC
ISCII
VISCII
YUSCII
Юникод
ASCII art
КОИ-8
Ссылки
Цветная таблица ASCII
Standard ECMA-6: 7-bit Coded Character Set, 6th edition (англ.). Ecma International (December 1991). Архивировано из первоисточника 23 августа 2011.
Tom Jennings An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration (англ.) (1999-09-16 — 2004-10-29). Архивировано из первоисточника 23 августа 2011.
ASCII Chart and Other Resources (англ.). JimPrice.Com.
Кодировки символов
Основы →
алфавит • текст ( файл • данные ) • набор символов • конверсия
интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • кракозябры • транслит • нестандартные шрифты • текст как изображение
Утилиты: iconv • recode
ASCII | это.
.. Что такое ASCII?
У этого термина существуют и другие значения, см. ASCII (значения).
ASCII
ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной кодовой таблицы (например КОИ-8).
Содержание
1 Наложение символов
2 Национальные варианты ASCII
3 Кодировка
4 Управляющие символы
5 Структурные свойства таблицы
6 Представление ASCII в ЭВМ
7 Примечание
8 См. ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант 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.
Кодировка
.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.
_
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 изначально предназначался для обмена информацией (по телетайпу), в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства.
(После названия каждого символа указан его 16-ричный код)
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. Следующие за ним символы имеют какое-то другое значение, отличное от того, которое определено в ASCII. Обычно начинал управляющие последовательности.
FS, 1C — File Separator, разделитель файлов.
GS, 1D — Group Separator, разделитель групп.
RS, 1E — Record Separator, разделитель записей.
US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
DEL, 7F — Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).
Структурные свойства таблицы
Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит 1002 (для букв верхнего регистра) или 1102 (для букв нижнего регистра).
Представление 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 доп.
109
8 доп.
108
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
Примечание
↑ G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. Architecture of the IBM System/360, 1964
См. также
Переносимый набор символов
Управляющие символы
EBCDIC
ISCII
VISCII
YUSCII
Юникод
ASCII art
КОИ-8
Ссылки
Цветная таблица ASCII
Standard ECMA-6: 7-bit Coded Character Set, 6th edition (англ.). Ecma International (December 1991). Архивировано из первоисточника 23 августа 2011.
Tom Jennings An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration (англ.) (1999-09-16 — 2004-10-29). Архивировано из первоисточника 23 августа 2011.
ASCII Chart and Other Resources (англ.). JimPrice.Com.
Кодировки символов
Основы →
алфавит • текст ( файл • данные ) • набор символов • конверсия
интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • кракозябры • транслит • нестандартные шрифты • текст как изображение
Утилиты: iconv • recode
ASCII | это.
.. Что такое ASCII?
У этого термина существуют и другие значения, см. ASCII (значения).
ASCII
ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной кодовой таблицы (например КОИ-8).
Содержание
1 Наложение символов
2 Национальные варианты ASCII
3 Кодировка
4 Управляющие символы
5 Структурные свойства таблицы
6 Представление ASCII в ЭВМ
7 Примечание
8 См. ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант 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.
Кодировка
.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.
_
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 изначально предназначался для обмена информацией (по телетайпу), в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства.
(После названия каждого символа указан его 16-ричный код)
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. Следующие за ним символы имеют какое-то другое значение, отличное от того, которое определено в ASCII. Обычно начинал управляющие последовательности.
FS, 1C — File Separator, разделитель файлов.
GS, 1D — Group Separator, разделитель групп.
RS, 1E — Record Separator, разделитель записей.
US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
DEL, 7F — Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).
Структурные свойства таблицы
Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит 1002 (для букв верхнего регистра) или 1102 (для букв нижнего регистра).
Представление 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 доп.
109
8 доп.
108
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
Примечание
↑ G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. Architecture of the IBM System/360, 1964
См. также
Переносимый набор символов
Управляющие символы
EBCDIC
ISCII
VISCII
YUSCII
Юникод
ASCII art
КОИ-8
Ссылки
Цветная таблица ASCII
Standard ECMA-6: 7-bit Coded Character Set, 6th edition (англ.). Ecma International (December 1991). Архивировано из первоисточника 23 августа 2011.
Tom Jennings An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration (англ.) (1999-09-16 — 2004-10-29). Архивировано из первоисточника 23 августа 2011.
ASCII Chart and Other Resources (англ.). JimPrice.Com.
Кодировки символов
Основы →
алфавит • текст ( файл • данные ) • набор символов • конверсия
интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • кракозябры • транслит • нестандартные шрифты • текст как изображение
Утилиты: iconv • recode
как человечество пришло к международному стандарту кодирования символов / Хабр
Уверена, что большинство читателей хоть немного знакомы с терминами «Unicode» и «UTF-8». Но все ли знают, что именно стоит за ними? По сути они относятся к стандартам кодирования символов, также известным как наборы символов. Концепция появилась во времена оптического телеграфа, а не в компьютерную эру, как можно было подумать. Еще в 18 веке существовала потребность в быстрой передаче информации на большие расстояния, для чего использовались так называемые телеграфные коды. Информация кодировалась с помощью оптических, электронных и других средств.
В течение сотен лет, прошедших с момента изобретения первого телеграфного кода, не было никаких реальных попыток международной стандартизации таких схем кодирования. Даже первые десятилетия эры телетайпов и домашних компьютеров мало что изменили. Несмотря на то, что EBCDIC (8-битная кодировка символов IBM, продемонстрированная на перфокарте в заглавной иллюстрации) и ASCII немного улучшили ситуацию, способа кодировать растущую коллекцию символов без значительных затрат памяти все еще не было.
Развитие Юникода началось в конце 1980-х годов, когда рост обмена цифровой информацией во всем мире сделал потребность в единой системе кодирования более насущной. В наши дни Юникод позволяет нам использовать единую схему кодирования для всего — от базового английского текста и традиционного китайского, вьетнамского, даже майянского языков до пиктограмм, которые мы привыкли называть «эмодзи».
От кода к графикам
Еще в эпоху Римской империи было хорошо известно, что быстрая передача информации имеет значение. В течение долгого времени это означало наличие гонцов на лошадях, которые доставляли сообщения на большие расстояния, или их эквивалента. Как улучшить систему доставки информации, придумали еще в 4 веке до нашей эры — так появились водяной телеграф и система сигнальных огней. Но действительно эффективной передача данные на большие расстояния стала лишь в 18 веке.
Об оптическом телеграфе, также называемом «семафоре», мы уже писали в статье об истории оптической связи. Он состоял из ряда ретрансляционных станций, каждая из которых была оборудована системой поворотных стрелок, используемой для отображения символов телеграфного кода. Система братьев Шапп, которая использовалась французскими войсками между 1795 и 1850-ми годами, была основана на деревянной перекладине с двумя подвижными концами (рычагами), каждый из которых мог перемещаться в одно из семи положений. Вместе с четырьмя позициями для перекладины семафор в теории мог обозначить 196 символов (4x7x7). На практике число сокращалось до 92-94 позиций.
Французский оптический телеграфный код братьев Шапп, 1809 год
Система семафоров использовалась не столько для прямого кодирования символов, сколько для обозначения определенных строк в кодовой книге. Метод подразумевал, что по нескольким кодовым сигналам можно было расшифровать все сообщение. Это ускоряло передачу и делало бессмысленным перехват сообщений.
Улучшение производительности
Затем оптический телеграф был заменен электрическим. Это означало, что времена, когда кодировки фиксировались людьми, наблюдающими за ближайшей релейной вышкой, прошли. С двумя телеграфными устройствами, соединенными металлическим проводом, инструментом для передачи информации стал электрический ток. Это изменение привело к появлению новых кодов электрического телеграфа, а код Морзе в итоге стал международным стандартом (за исключением США, которые продолжали использовать американский код Морзе за пределами радиотелеграфии) с момента его изобретения в Германии в 1848 году.
Международный код Морзе имеет преимущество перед американским аналогом: в нем используется больше тире, чем точек. Такой подход снижает скорость передачи, но улучшает прием сообщения на другом конце линии. Это было необходимо, когда длинные сообщения передавались по многокилометровым проводам операторами разного уровня подготовки.
Стандарт ITA 2
По мере развития технологий ручной телеграф был заменен на Западе автоматическим. В нем использовался 5-битный код Бодо, а также производный от него код Мюррея (последний основывался на использовании бумажной ленты, в которой пробивались отверстия). Система Мюррея позволяла заранее подготовить ленту с сообщениями, а затем загрузить ее в устройство для чтения, чтобы сообщение передалось автоматически. Код Бодо лег в основу международного телеграфного алфавита версии 1 (ITA 1), а модифицированный код Бодо-Мюррея лег в основу ITA 2, которая использовалась вплоть до 1960-х годов.
К 1960-м годам ограничение в 5 бит на символ уже не требовалось, что привело к развитию 7-битного ASCII в США и таких стандартов, как JIS X 0201 (для японских символов катакана) в Азии. В сочетании с телетайпами, которые тогда широко использовались, это позволяло передавать довольно сложные сообщения, включающие символы верхнего и нижнего регистров.
Полный набор символов 7-битного ASCII
В течение 1970-х и начала 1980-х годов ограничений 7- и 8-битных кодировок, таких как расширенный ASCII (например, ISO 8859-1 или Latin 1), было достаточно для основных домашних компьютеров и офисных нужд. Несмотря на это, потребность в улучшении была очевидна, поскольку общие задачи, такие как обмен цифровыми документами и текстом, часто приводили к хаосу из-за множества кодировок ISO 8859. Первый шаг был сделан в 1991 году — появился 16-битный Unicode 1.0.
Развитие 16-битных кодировок
Удивительно, что всего в 16 битах Unicode удалось охватить не только все западные системы письма, но и многие китайские иероглифы и множество специальных символов, используемых, например, в математике. С 16 битами, допускающими до 65 536 кодовых точек, Unicode 1.0 легко вмещал 7 129 символов. Но к моменту появления Unicode 3.1 в 2001 году он содержал не менее 94 140 символов.
Сейчас, в своей 13 версии, Unicode содержит в общей сложности 143 859 символов, не считая управляющих. Изначально Unicode предполагалось использовать только для кодирования систем записи, которые применяются в настоящее время. Но к релизу Unicode 2.0 в 1996 году стало понятно, что эту цель следует переосмыслить, чтобы кодировать даже редкие и исторические символы. Чтобы достичь этого без обязательной 32-битной кодировки каждого символа, Unicode изменился: он позволил не только кодировать символы напрямую, но и использовать их компоненты, или графемы.
Концепция в чем-то похожа на векторные изображения, где не указывается каждый пиксель, а вместо этого описываются элементы, составляющие рисунок. В результате кодировка Unicode Transformation Format 8 (UTF-8) поддерживает 231 кодовую точку, при этом для большинства символов в текущем наборе символов Unicode обычно требуется один-два байта.
Unicode на любой вкус и цвет
На данный момент довольно много людей, вероятно, сбиты с толку из-за различных терминов, которые используются, когда дело доходит до Unicode. Поэтому здесь важно отметить, что Unicode относится к стандарту, а различные Unicode Transformation Format являются его реализациями. UCS-2 и USC-4 — это более старые 2- и 4-байтовые реализации Unicode, при этом UCS-4 идентичен UTF-32, а UCS-2 заменяем UTF-16.
UCS-2 как самая ранняя форма Unicode проникла во многие операционные системы 90-х годов, что сделало переход на UTF-16 наименее опасным вариантом. Вот почему Windows и MacOS, оконные менеджеры, такие как KDE, и среды выполнения Java и . NET используют внутреннее представление UTF-16.
Обзор базовой многоязычной плоскости Unicode, первой плоскости Unicode практически со всеми современными языками
UTF-32, как следует из названия, кодирует каждый символ в четырех байтах. Это немного расточительно, зато абсолютно предсказуемо. Тот же UTF-8 символ может кодировать символ в диапазоне от одного до четырех байтов. В случае с UTF-32 определение количества символов в строке — это простая арифметика: взять все количество байтов и поделить на четыре. Это привело к появлению компиляторов и некоторых языков, например Python, позволяющих использовать UTF-32 для представления строк Unicode.
Однако из всех форматов Unicode наиболее популярным на сегодняшний день является UTF-8. Этому во многом способствовала всемирная сеть Интернет, где большинство веб-сайтов обслуживают свои HTML-документы в кодировке UTF-8. Из-за компоновки различных плоскостей кодовых точек в UTF-8, Western и многие другие распространенные системы записи умещаются в пределах двух байтов. Если сравнивать со старыми кодировками ISO 8859 и Shift JIS, фактически тот же текст в UTF-8 не занимает больше места, чем раньше.
От оптических башен до интернета
Времена конных гонцов, ретрансляционных вышек и небольших телеграфных станций прошли. Коммуникационные технологии сильно развились. Даже те дни, когда телетайпы были обычным явлением в офисах, вспоминаются с трудом. Однако на каждом этапе развития истории человечеству было необходимость кодировать, хранить и передавать информацию. И это привело нас к тому, что теперь мы можем мгновенно передавать сообщение по всему миру в системе символов, которую можно декодировать независимо от того, где вы находитесь.
Для тех, кому довелось переключаться между кодировками ISO 8859 в почтовых клиентах и веб-браузерах, чтобы получить что-то, похожее на исходное текстовое сообщение, поддержка Unicode стала благословением. Я могу понять этих людей. Когда 7-битный ASCII (или EBCDIC) был безальтернативной технологией, иногда приходилось тратить часы, разбираясь в символьной путанице цифрового документа, полученного из европейского или американского офиса.
Даже если Unicode не лишен проблем, трудно не испытывать благодарности, сравнивая его с тем, что было раньше. Вот они, 30 лет существования Unicode.
Исчерпывающее руководство по Юникоду и кодировке символов в Python
Работа с кодировкой символов на Python, да и на любом другом языке, временами выглядит довольно сложной. На Stack Overflow можно найти тысячи вопросов, посвящённых таким исключениям, как UnicodeDecodeError и UnicodeEncodeError. Данное руководство призвано прояснить сложные аспекты работы с этими исключениями и продемонстрировать, что работа с текстовыми и двоичными данными на Python 3 может быть приятной. В Python хорошо реализована поддержка Юникода, однако для работы с кодировкой всё же потребуется приложить усилия.
Вводная часть статьи даст общее понимание работы с Юникодом, не привязанное к какому-то определённому языку, однако практические примеры будут приведены именно на Python, а их описание будет довольно лаконичным.
Изучив эту статью, вы:
Освоите концепции кодировки символов и системы нумерации;
Поймёте, как кодировка работает с объектами str и bytes;
Узнаете, как в Python поддерживается система нумерации посредством различных форм литералов int;
Познакомитесь со встроенными функциями языка, относящимися к кодировке и системе нумерации.
Система нумерации и кодировка символов настолько тесно связаны, что их придётся раскрыть в одном руководстве, в противном случае материал будет неполным.
Прим. Статья ориентирована на Python 3, а все примеры кода созданы с помощью оболочки CPython 3.7.2. Большая часть более ранних версий Python 3 также будут корректно обрабатывать код. Если вы всё ещё используете Python 2 и различия в обработке текста и бинарных данных между 2 и 3 версиями языка вас отпугивают, это руководство может помочь вам преодолеть барьер.
Что такое кодировка символов?
Существуют десятки, если не сотни, кодировок символов. Понять эту концепцию легче всего, разобрав одну из самых простых, ASCII.
Независимо от того, занимаетесь вы самообразованием или получили более формальное образование в сфере IT , наверняка пару раз вы уже видели таблицу ASCII. Эта таблица — хорошее начало для изучения принципов кодировки, так как она простая и маленькая (как вы увидите дальше, даже слишком маленькая).
Она охватывает следующее:
Символы английского алфавита в нижнем регистре: от a до z;
Символы английского алфавита в верхнем регистре: от A до Z;
Некоторые знаки препинания и символы: например «$» или «!»;
Символы, отображаемые как пустое место: пробел (« »), символ новой строки, возврата каретки, горизонтальной и вертикальной табуляции и несколько других;
Некоторые непечатаемые символы: такие как бекспейс, «\b», которые просто невозможно отобразить, так, как к примеру, букву А.
Приведём формальное определение кодировки символов.
На самом высоком уровне — это способ перевода символов (таких как буквы, знаки пунктуации, служебные знаки, пробелы и контрольные символы) в целые числа и затем непосредственно в биты. Каждый символ может быть закодирован уникальным двоичным кодом. Если вы плохо знакомы с концепцией битов, не волнуйтесь, мы вскоре о ней поговорим.
Группы символов выделяют в отдельные категории. Каждому символу соответствует кодовая точка, которую можно рассматривать просто как целое число. В таблице ASCII символы сегментированы следующим образом:
Диапазон кодовых точек
Класс
от 0 до 31
Контрольные и неотображаемые символы
от 32 до 64
Знаки пунктуации, символы, числа и пробел
от 65 до 90
Буквы английского алфавита в верхнем регистре
от 91 до 96
Дополнительные графемы, такие как [ и \
от 97 до 122
Буквы английского алфавита в нижнем регистре
от 123 до 126
Дополнительные графемы, такие как { и |
127
Контрольный неотображаемый символ (DEL)
Всего кодировка ASCII содержит 128 символов. В таблице ниже вы видите исчерпывающий набор знаков, которые позволяет отобразить эта кодировка. Если вы не видите какого-то символа, значит вы просто не сможете его вывести с помощью ASCII.
Таблица символов ASCII
Кодовая точка
Символ (имя)
Кодовая точка
Символ (имя)
0
NUL (Null)
64
@
1
SOH (Start of Heading)
65
A
2
STX (Start of Text)
66
B
3
ETX (End of Text)
67
C
4
EOT (End of Transmission)
68
D
5
ENQ (Enquiry)
69
E
6
ACK (Acknowledgment)
70
F
7
BEL (Bell)
71
G
8
BS (Backspace)
72
H
9
HT (Horizontal Tab)
73
I
10
LF (Line Feed)
74
J
11
VT (Vertical Tab)
75
K
12
FF (Form Feed)
76
L
13
CR (Carriage Return)
77
M
14
SO (Shift Out)
78
N
15
SI (Shift In)
79
O
16
DLE (Data Link Escape)
80
P
17
DC1 (Device Control 1)
81
Q
18
DC2 (Device Control 2)
82
R
19
DC3 (Device Control 3)
83
S
20
DC4 (Device Control 4)
84
T
21
NAK (Negative Acknowledgment)
85
U
22
SYN (Synchronous Idle)
86
V
23
ETB (End of Transmission Block)
87
W
24
CAN (Cancel)
88
X
25
EM (End of Medium)
89
Y
26
SUB (Substitute)
90
Z
27
ESC (Escape)
91
[
28
FS (File Separator)
92
\
29
GS (Group Separator)
93
]
30
RS (Record Separator)
94
^
31
US (Unit Separator)
95
_
32
SP (Space)
96
`
33
!
97
a
34
"
98
b
35
#
99
c
36
$
100
d
37
%
101
e
38
&
102
f
39
'
103
g
40
(
104
h
41
)
105
i
42
*
106
j
43
+
107
k
44
,
108
l
45
-
109
m
46
.
110
n
47
/
111
o
48
0
112
p
49
1
113
q
50
2
114
r
51
3
115
s
52
4
116
t
53
5
117
u
54
6
118
v
55
7
119
w
56
8
120
x
57
9
121
y
58
:
122
z
59
;
123
{
60
<
124
|
61
=
125
}
62
>
126
~
63
?
127
DEL (delete)
Модуль string
Модуль string — простой и удобный инструмент, разграничивающий содержащиеся в ASCII символы по группам, разделяя их в строки-константы. _`{|}~»»»
printable = digits + ascii_letters + punctuation + whitespace
Большинство этих констант исчерпывающе описаны их идентификаторами. Мы вкратце коснёмся констант hexdigits и octdigits.
Мы можем использовать определённые в модуле константы для рутинных операций:
>>> import string
>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
Прим. Обратите внимание, string.printable включает string.whitespace. Это несколько не соответствует тому, как печатаемые символы определяет метод str.isprintable(), который не рассматривает ни один из символов {'\v', '\n', '\r', '\f', '\t'} как печатаемый.
Это различие происходит из определения метода: str.isprintable() рассматривает что-либо печатаемым, если «все символы рассматриваются как печатаемые методом repr().
Что такое биты
Настало время вспомнить, что такое бит, базовая единица информации, которой оперируют вычислительные устройства.
Бит — это сигнал, который имеет два возможных состояния. Есть различные способы символического отображения этих состояний:
0 или 1;
«да» или «нет»;
True или False;
«включено» или «выключено».
Таблица ASCII из предыдущего раздела использует то, что обычно назвали бы числами (от 0 до 127), однако для наших целей важно понимать, что это десятичные числа (с основанием 10).
Каждое из этих десятичных чисел можно выразить последовательностью бит (числом с основанием 2). Вот таблица соотношения двоичных и десятичных чисел:
Десятичное
Двоичное (кратко)
Двоичное (в байте)
0
0
00000000
1
1
00000001
2
10
00000010
3
11
00000011
4
100
00000100
5
101
00000101
6
110
00000110
7
111
00000111
8
1000
00001000
9
1001
00001001
10
1010
00001010
Обратите внимание, что при увеличении десятичного числа n для его отображения (а следовательно и для отображения символа, относящегося к этому числу) требуется всё больше значимых бит.
Вот удобный метод представить строки ASCII как последовательность бит. Каждый символ из строки ASCII переводится в последовательность из 8 нолей и единиц с пробелами между этими последовательностями:
>>> def make_bitseq(s: str) -> str:
... if not s.isascii():
... raise ValueError("ASCII only allowed")
... return " ".join(f"{ord(i):08b}" for i in s)
>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'
>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'
>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'
>>> make_bitseq("~5")
'01111110 00110101'
Прим. Обратите внимание, что метод .isascii() появился в Python 3.7.
Строковой литерал f-string f"{ord(i):08b}" использует мини-язык форматирования Format Specification Mini-Language, а именно его возможность замещения полей при форматировании строк.
левая часть выражения, ord(i), представляет объект, значение которого будет отформатировано и отображено при выводе. ord() возвращает кодовую точку одиночного символа str в десятичном выражении;
Правая сторона выражения определяет форматирование объекта. 08 означает ширина 8, заполнение нулями, а b работает как команда вывести число в двоичном (binary) эквиваленте.
На самом деле этот метод можно использовать разве что для развлечения. Он выдаст ошибку для любого символа, не представленного в ASCII-таблице. Позже мы рассмотрим, как эта проблема решается в других кодировках.
Нам нужно больше бит
Исходя из определения бита, можно вывести следующую закономерность: при определённом количестве бит n с их помощью можно выразить 2n разных значений.
1 бит позволяет выразить 21 == 2 возможных значения;
8 бит позволяют выразить 28 == 256 возможных значений;
64 бита позволяют выразить 264 == 18 446 744 073 709 551 616 возможных значений.
В качестве естественного вывода из приведённой выше формулы мы можем установить следующее: для того, чтобы вычислить количество бит, необходимых для выражения определённого числа разных значений, нам нужно найти n в уравнении 2n=x, где переменная x известна.
Вот как можно это рассчитать:
>>> from math import ceil, log
>>> def n_bits_required(nvalues: int) -> int:
... return ceil(log(nvalues) / log(2))
>>> n_bits_required(256)
8
Округление вверх в методе n_bits_required() требуется для расчёта значений, которые не являются чистой степенью двойки. К примеру, вам нужно сохранить набор из 110 различных символов. Для этого потребуется log(110) / log(2) == 6.781 бит, но поскольку бит для вычислительной техники является мельчайшей неделимой величиной, для отображения 110 различных значений нам понадобится 7 бит, при этом несколько значений останутся невостребованными.
>>> n_bits_required(110)
7
Всё сказанное служит для обоснования одной идеи: ASCII, строго говоря, семибитная кодировка. Эта таблица содержит 128 кодовых точек, и, соответственно, символов, от 0 до 127 включительно. Это требует 7 бит:
>>> n_bits_required(128) # от 0 до 127
7
>>> n_possible_values(7)
128
Проблема заключается в том, что современные компьютеры не используют для хранения чего-либо семибитные последовательности. Основной единицей хранения информации современных вычислительных устройств являются восьмибитные последовательности, байты.
Прим. В этой статье под байтом подразумевается группа из 8 бит, как повелось с 60-х годов прошлого века. Если вам не по душе это новомодное название, можете называть их октетами.
То, что ASCII-таблица использует 7 бит из доступных 8, означает, что память вычислительного устройства, занятого строками символов ASCII, наполовину пуста. Для того, чтобы лучше понять, почему это происходит, вернитесь к приведённой выше таблице соответствия двоичных и десятичных чисел. Вы можете выразить числа 0 и 1 с помощью 1 бита, или вы можете использовать 8 бит, чтобы выразить их как 00000000 и 00000001 соответственно.
Прим. перев. Если быть точным, то пустой остаётся только одна восьмая часть памяти. Однако с помощью именно этого незадействованного бита можно было бы создать вдвое больше кодовых точек.
Вы можете выразить числа от 0 до 3 всего двумя битами, от 00 до 11, или использовать 8 бит, чтобы выразить их как 00000000, 00000001, 00000010 и 00000011. Самая большая кодовая точка ASCII, 127, требует только 7 значимых бит.
С учётом этого взгляните, как метод make_bitseq() преобразует строки ASCII в строки, состоящие из байт, где каждый символ требует один байт:
Неэффективное использование восьмибитной структуры памяти современных вычислительных устройств привело к появлению неструктурированного семейства конфликтующих кодировок, задействующих оставшуюся незанятой половину кодовых точек, доступных в одном байте.
Несмотря на попытку задействовать дополнительный бит, эти конфликтующие кодировки не могли отобразить все возможные символы, используемые человечеством в письменности.
Со временем появилась одна большая схема кодировки, которая объединила их. Однако, прежде чем мы до этого доберёмся, поговорим немного о краеугольных камнях схем кодировки символов — системах счисления.
Изучаем основы: другие системы счисления
В ASCII-таблице, как мы увидели, каждый символ соответствует числу от 0 до 127.
Этот диапазон чисел выражен в десятичной системе счисления. Именно эту систему используют для счёта люди, просто потому что на руках у нас по 10 пальцев.
Однако существуют и другие системы счисления, которые, в частности, широко используются в исходном коде CPython. Следует понимать, что действительное число не изменяется, а системы счисления просто по-разному его выражают.
Вопрос, какое число записано в строке "11" покажется странным, ведь для большинства очевидно, что это одиннадцать.
Однако в строке может быть представлено и другое число, в зависимости от системы счисления. Помимо десятичной, используются такие общепринятые альтернативы:
Двоичная: с основой 2;
Восьмеричная: с основой 8;
Шестнадцатеричная (hex): с основой 16.
Что же мы подразумеваем, говоря что определённая система счисления имеет основу N?
Один из способов объяснения разных систем счисления заключается в том, чтобы представить, что у вас N пальцев.
Если же вам требуется более подробное объяснение систем счисления, обратитесь к книге Чарльза Петцольда «Код». В этой книге детально объясняются основы работы вычислительной техники.
Конструктор int() — один из способов показать, как разные системы счисления преобразуют одну и ту же строку с помощью Python. Если вы передадите str в int(), Python по умолчанию будет считать, что строка содержит число в десятичной системе. Однако вы можете дать другие указания:
Чаще в Python для обозначения того, что целое число представлено в системе счисления, отличной от десятичной, используют префиксы-литералы. Для каждой из трёх альтернативных систем существует свой литерал.
Тип литерала
Префикс
Пример
Нет
Нет
11
Binary literal
0b или 0B
0b11
Octal literal
0o или 0O
0o11
Hex literal
0x или 0X
0x11
Всё это — разновидности целочисленных литералов. Результаты применения префиксов будут такими же, как и в случае использования int() с определением параметра base. Для Python всё это просто целые числа:
В таблице ниже отражено, как можно ввести десятичные числа от 0 до 20 в двоичном, восьмеричном и шестнадцатеричном эквиваленте. Любой из этих способов можно использовать как в оболочке интерпретатора Python, так и в исходном коде, и все эти числа будут рассматриваться как относящиеся к типу int.
Десятичные числа в других системах счисления
Десятичные
Двоичные
Восмеричные
Шестнадцатеричные
0
0b0
0o0
0x0
1
0b1
0o1
0x1
2
0b10
0o2
0x2
3
0b11
0o3
0x3
4
0b100
0o4
0x4
5
0b101
0o5
0x5
6
0b110
0o6
0x6
7
0b111
0o7
0x7
8
0b1000
0o10
0x8
9
0b1001
0o11
0x9
10
0b1010
0o12
0xa
11
0b1011
0o13
0xb
12
0b1100
0o14
0xc
13
0b1101
0o15
0xd
14
0b1110
0o16
0xe
15
0b1111
0o17
0xf
16
0b10000
0o20
0x10
17
0b10001
0o21
0x11
18
0b10010
0o22
0x12
19
0b10011
0o23
0x13
20
0b10100
0o24
0x14
Кстати, вы можете сами убедиться, что подобные способы записи чисел очень часто используется в Стандартной Библиотеке Python. Найдите папку lib/python3.7/ в своей системе, перейдите в неё и введите команду:
Команда сработает в любой Unix-системе с утилитой grep. С её помощью вы найдёте все шестнадцатеричные литералы. Для поиска двоичных используйте \b0b, а для восьмеричных — \b0o.
Для чего же нужны альтернативные литералы целых чисел? Если коротко, числа 2, 8 и 16, в отличие от 10, являются степенями двойки. Основанные на них системы счисления выражают численные значения способами, более удобными для обработки бинарными вычислительными устройствами. К примеру, 65536, или 216, в шестнадцатеричной системе просто 10000 или, используя литерал, 0x10000.
Введение в Юникод
Как видите, проблема ASCII в том, что этой таблицы недостаточно для отображения знаков, символов и глифов, использующихся во всех языках и диалектах мира. Её недостаточно даже для английского языка.
Юникод служит тем же целям, что и ASCII, но содержит намного больший набор кодовых точек. В период времени между появлением ASCII и принятием Юникода использовалось ещё несколько различных кодировок, но рассматривать их подробно нет смысла, так как Юникод и одна из его схем, UTF-8, в настоящее время стали использоваться практически повсеместно.
Вы можете представить Юникод как расширенную версию ASCII-таблицы — с 1 114 112 возможными кодовыми точками, от 0 до 1 114 111. Это 17*(216) или 0x10ffff в шестнадцатеричном представлении. Фактически, ASCII является частью Юникода, так как первые 128 символов этих кодировок полностью совпадают.
Чтобы соблюсти технические детали, сам по себе Юникод не является кодировкой. Он скорее реализуется в различных кодировках символов, как вы вскоре увидите. По структуре Юникод скорее ассоциативный массив (что-то вроде dict) или база данных, состоящая из таблицы с двумя колонками. В этой таблице разные символы (такие как "a", "¢", или даже "ቈ") соотносятся с различными целыми положительными числами. Кодировка же должна предоставлять несколько больше возможностей.
Юникод содержит практически любой символ, который только можно представить, включая дополнительные непечатаемые. Например, кодовая точка 8207 соответствует отметке RTL, которая используется для смены направления письма. Она полезна в текстах, где абзацы на одном из европейских языков соседствуют с абзацами на арабских языках.
Прим. Кстати, если уж мы хотим быть совсем точны в деталях, то надо отметить ещё один факт. Исторически сложилось, что в Юникоде доступны только 1 111 998 кодовых точек.
Юникод и UTF-8
Довольно скоро стало понятно, что все необходимые символы невозможно вместить в таблицу, используя только один байт. Современные, более ёмкие кодировки требовали использования больших объёмов.
Ранее мы упоминали, что Юникод сам по себе не является кодировкой. И вот почему.
Юникод не содержит указаний по извлечению из текста бит, он работает только с кодовыми точками. В нём нет стандарта конверсии текста в двоичные данные и обратно.
Юникод является абстрактным стандартом кодировки. Для практического его применения чаще всего используют схему UTF-8. Стандарт Юникод (таблица соответствий символов кодовыми точкам) определяет несколько различных кодировок на основе единого набора символов.
Как и менее распространённые UTF-16 и UTF-32, UTF-8 — формат кодировки для отображения символов Юникода в двоичном виде, используя один или несколько байт на один символ. UTF-16 и UTF-32 мы обсудим чуть позже, но пока нам интересен UTF-8 как самый популярный формат.
Сначала требуется разобрать термины «кодирование» и «декодирование».
Кодирование и декодирование в Python 3
Тип данных str в Python 3 рассчитан на представление текста в удобном для чтения формате и может содержать любые символы Юникода.
Тип bytes, напротив, представляет двоичные данные, последовательность байт, без указания на кодировку.
Кодирование и декодирование — это процесс перехода данных из одной формы в другую.
В методах .encode() и .decode() по умолчанию используется параметр "utf-8", однако для большей уверенности этот параметр можно определить самостоятельно:
str.encode() возвращает объект типа bytes. И литералы этого типа объектов (такие как b"r\xc3\xa9sum\xc3\xa9"), и его отображение допускают только символы ASCII.
Вот почему при вызове "El Niño".encode("utf-8"), ASCII-совместимое "El" отображается как есть, а n с тильдой экранируется в "\xc3\xb1". Этой с виду неудобочитаемой последовательностью представлены два байта, 0xc3 и 0xb1 в шестнадцатеричной системе:
>>> " ". join(f"{i:08b}" for i in (0xc3, 0xb1))
'11000011 10110001'
Таким образом символ ñ требует два байта для бинарного представления с помощью UTF-8.
Прим. Если вы введёте help(str.encode), скорее всего, увидите параметр по умолчанию encoding='utf-8'. Однако имейте в виду, что настройки Windows для Python 3.6 могут отличаться, поэтому использовать методы кодирования и декодирования без указания необходимой кодировки (например "résumé".encode()) следует с осторожностью.
Python 3: всё на Юникоде
Python 3 полностью реализован на Юникоде, а точнее на UTF-8. Вот что это означает:
По умолчанию предполагается, что исходный код Python 3 написан с помощью UTF-8. Это значит, что вам не нужно использовать определение # -*- coding: UTF-8 -*- в начале файлов .py в этой версии языка.
Все тексты (объекты формата str) реализованы на Юникоде. Кодированный текст представлен двоичными данными (bytes). Тип strможет содержать любой символ-литерал из Юникода (например "Δv / Δt"), и все они хранятся в Юникоде.
Любой из символов Юникода приемлем в качестве идентификатора. Например, вы можете использовать выражение résumé = "~/Documents/resume.pdf".
В модуле re по умолчанию установлен флаг re.UNICODE, а не re.ASCII. Это означает, что r"\w" соответствует буквам из Юникода, а не просто символам ASCII.
По умолчаниюencoding в str.encode() в bytes.decode() установлен в UTF-8.
Нужно отметить также нюанс, касающийся встроенного метода open(). Его параметр encoding зависит от платформы и определяется значением locale.getpreferredencoding():
>>> # Mac OS X High Sierra
>>> import locale
>>> locale.getpreferredencoding()
'UTF-8'
>>> # Windows Server 2012; другие сборки Windows могут использовать UTF-16
>>> import locale
>>> locale. getpreferredencoding()
'cp1252'
Мы делаем упор на эти моменты, чтобы вы вдруг не подумали, что кодировка UTF-8 является универсальной. Она действительно широко распространена, но вы вполне можете столкнуться и с другими вариантами. Не будет лишним предусмотреть это в коде.
Один байт, два байта, три байта, четыре…
Одна из важнейших особенностей UTF-8 состоит в том, что это кодировка с переменным размером.
Вспомните раздел, посвящённый ASCII. Любой символ в этой таблице требует максимум одного байта пространства. Это можно быстро проверить с помощью следующего генератора:
>>> all(len(chr(i).encode("ascii")) == 1 for i in range(128))
True
С UTF-8 дела обстоят по-другому. Символы Юникода могут занимать от одного до четырёх байт. Вот пример четырёхбайтного символа:
>>> ibrow = "?"
>>> len(ibrow)
1
>>> ibrow.encode("utf-8")
b'\xf0\x9f\xa4\xa8'
>>> len(ibrow. encode("utf-8"))
4
>>> # Вызов list() с объектом типа bytes возвращает
>>> # значение каждого байта
>>> list(b'\xf0\x9f\xa4\xa8')
[240, 159, 164, 168]
Это небольшая, но важная особенность метода len():
Размер единичного символа Юникода в объекте str языка Python всегда будет равен 1, вне зависимости от количества занимаемых байт.
Длина того же символа в объекте типа bytes будет варьироваться от 1 до 4.
Таблица ниже показывает, сколько байт занимают основные типы символов.
Десятичный диапазон
Шестнадцатеричный диапазон
Включённые символы
Примеры
от 0 до 127
от "\u0000" до "\u007F"
U.S. ASCII
"A", "\n", "7", "&"
от 128 до 2047
от "\u0080" до "\u07FF"
Большая часть латинских алфавитов*
"ę", "±", "ƌ", "ñ"
от 2048 до 65535
от "\u0800" до "\uFFFF"
Дополнительные части многоязыковых символов (BMP)**
"ത", "ᄇ", "ᮈ", "‰"
от 65536 до 1114111
от "\U00010000" до "\U0010FFFF"
Другое***
"?", "?", "?", "?",
*Такие как английский, арабский, греческий, ирландский. **Масса языков и символов, в основном китайский, японский и корейский с разделением по томам (а также ASCII и латиница). ***Дополнительные символы китайского, японского, корейского и вьетнамского, а также другие символы и эмоджи.
Прим. У UTF-8 есть и другие технические особенности. Те, кто работает на Python, редко с ними сталкиваются, поэтому мы не будем раскрывать их в этой статье, но упомянем вкратце, чтобы сохранить полноту картины. Так, UTF-8 использует коды-префиксы, указывающие на количество байт в последовательности. Такой приём позволяет декодеру группировать байты в условиях кодировки с переменным размером. Количество байт в последовательности определяется первым её байтом. Другие технические подробности можно найти на странице Википедии, посвящённой UTF-8 или на официальном сайте.
Особенности UTF-16 и UTF-32
Рассмотрим альтернативные кодировки, UTF-16 и UTF-32. Различие между ними и UTF-8 в основном практическое. Продемонстрируем величину расхождения с помощью перевода туда и обратно:
В данном случае, когда мы кодируем четыре буквы греческого алфавита в двоичные данные с помощью UTF-8, а декодируем обратно в текст с использованием UTF-16, на выходе получается строка с совершенно другими символами (из корейского алфавита).
Так происходит, если для кодирования и декодирования применяют разные кодировки. Два варианта декодирования одного бинарного объекта могут вернуть текст даже на другом языке.
Таблица ниже демонстрирует количество байт, используемых в разных кодировках:
Кодировка
Байт на символ (включительно)
Варьируемая длина
UTF-8
От 1 до 4
Да
UTF-16
От 2 до 4
Да
UTF-32
4
Нет
Любопытный аспект семейства UTF: UTF-8 не всегда занимает меньше памяти, чем UTF-16. Хотя с точки зрения математики это выглядит маловероятным, однако это возможно:
Так получается из-за того, что кодовые точки в диапазоне от U+0800 до U+FFFF (от 2048 до 65535 в десятичной системе) в кодировке UTF-8 занимают три байта, а в UTF-16 только два.
Это не означает, что нужно работать с UTF-16, независимо от того, насколько часто вы работаете с символами в этом диапазоне. Один из самых важных поводов придерживаться UTF-8 — в мире кодировок лучше держаться вместе с большинством.
Кроме того, в 2019 году компьютерная память стоит дёшево, и экономия четырёх байт за счёт использования нестандартной кодировки вряд ли стоит усилий.
Прим. перев. Есть и более весомые причины использовать UTF-8. Среди них её обратная совместимость с ASCII, а также то, что это самосинхронизирующаяся кодировка.
Python и встроенные функции
Вы освоили самую сложную часть статьи. Теперь посмотрим, как всё изученное реализуется на Python.
В Python есть несколько встроенных функций, каким-либо образом относящихся к системам счисления и кодировке:
ascii()
bin()
bytes()
chr()
hex()
int()
oct()
ord()
str()
Логически их можно сгруппировать по назначению.
ascii(), bin(), hex() и oct() предназначены для различного представления вводных данных. Все они возвращают str. Первая, ascii(), производит представление объекта в ASCII, экранируя не входящие в эту таблицу символы. Оставшиеся три дают соответственно двоичное, шестнадцатеричное и восьмеричное представление целого числа. Все эти функции меняют только представление объекта, не изменяя непосредственно вводные данные.
bytes(), str() и int() — конструкторы классов соответствующих типов: bytes, str, и int. Все они предлагают способы подогнать данные под желаемый тип.
ord() и chr() выполняют противоположные действия. ord() конвертирует символ в десятичную кодовую точку, а chr() принимает в качестве аргумента целое число, и возвращает символ, кодовой точкой которого это число является.
В таблице ниже эти функции разобраны более подробно:
Встроенные функции для работы с кодировками
Функция
Форма
Тип аргументов
Тип возвращаемых данных
Назначение
ascii()
ascii(obj)
Различный
str
Представление объекта символами ASCII. Не входящие в таблицу символы экранируются
bin()
bin(number)
number: int
str
Бинарное представление целого чиста с префиксом "0b"
bytes()
bytes(последовательность_целых_чисел)
bytes(s, enc[, errors])
bytes(байты_или_буфер)
bytes([i])
Различный
bytes
Приводит аргумент к двоичным данным, типу bytes
chr()
chr(i)
i: int
i>=0
i<=1114111
str
Преобразует кодовую точку (целочисленное значение) в символ Юникода
hex()
hex(number)
number: int
str
Шестнадцатеричное представление целого числа с префиксом "0x"
int()
int([x])
int(x, base=10)
Различный
int
Приводит аргумент к типу int
oct()
oct(number)
number: int
str
Восьмеричное представление целого числа с префиксом "0o"
ord()
ord(c)
c: str
len(c) == 1
int
Возвращает значение кодовой точки символа Юникода
str()
str(object=’‘)
str(b[, enc[, errors]])
Различный
str
Приводит аргумент к текстовому представлению, типу str
Дальше можно посмотреть полезные примеры использования этих функций.
>>> ord("a")
97
>>> ord("ę")
281
>>> ord("ᮈ")
7048
>>> [ord(i) for i in "hello world"]
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
str():
>>> str("str of string")
'str of string'
>>> str(5)
'5'
>>> str([1, 2, 3, 4]) # Like [1, 2, 3, 4].__str__(), but use str()
'[1, 2, 3, 4]'
>>> str(b"\xc2\xbc cup of flour", "utf-8")
'¼ cup of flour'
>>> str(0xc0ffee)
'12648430'
Литералы для строк на Python
Вместо использования конструктора str(), объект этого типа чаще вводят напрямую:
>>> meal = "shrimp and grits"
Выглядит достаточно просто. Но есть один аспект, о котором нужно помнить. Поскольку Python позволяет использовать все возможности Юникода, можно «напечатать» символы, которых вы никогда не найдёте на клавиатуре. Можно скопировать и вставить их прямо в оболочку интерпретатора:
Кроме ввода через консоль реальных, неэкранированых символов Юникода, существуют и другие способы ввода текстовых строк.
Самые насыщенные разделы документации Python посвящены лексическому анализу. В частности, раздел о строках и литералах. Возможно, для понимания данного аспекта языка этот раздел придётся неоднократно перечитать.
Кроме прочего, там говорится о шести возможных способах ввода одного символа Юникода.
Первый, и самый распространённый метод, как вы уже видели — прямой ввод. Проблема состоит в поиске необходимых сочетаний клавиш. Здесь и могут пригодиться другие способы получения и представления символов. Вот полный список:
Экранирующая последовательность
Значение
Как отобразить "a"
"\ooo"
Символ с восьмеричным значением ooo
"\141"
"\xhh"
Символ с шестнадцатеричным значением hh
"\x61"
"\N{name}"
Символ с именем name в базе данных Юникода
"\N{LATIN SMALL LETTER A}"
"\uxxxx"
Символ с шестнадцатибитным (двухбайтным) шестнадцатеричным значением xxxx
"\u0061"
"\Uxxxxxxxx"
Символ с тридцатидвухбитным (четырёхбайтным) шестнадцатеричным значением xxxxxxxx
"\U00000061"
Это соответствие можно проверить на практике:
>>> (
. .. "a" ==
... "\x61" ==
... "\N{LATIN SMALL LETTER A}" ==
... "\u0061" ==
... "\U00000061"
... )
True
Нужно однако упомянуть и два основных затруднения при использовании этих методов:
Не каждый способ работает со всеми символами. Шестнадцатеричное представление числа 300 выглядит как 0x012c, а это значение просто не поместится в экранирующий код "\xhh", так как в нём допускаются всего две цифры. Самая большая кодовая точка, которую можно втиснуть в этот формат — "\xff" ("ÿ"). Аналогичо "\ooo" можно использовать только до "\777" ("ǿ").
Для \xhh, \uxxxx, и \Uxxxxxxxx требуется вводить ровно столько цифр, сколько указано в примерах. Это может стать неприятным сюрпризом, поскольку обычно основанные на Юникоде таблицы содержат кодовые точки для символов с префиксом U+ и варьирующимся количеством шестнадцатеричных символов. В этих таблицах кодовые точки отображают только значимые цифры.
Например, если вы обратитесь к сайту unicode-table.com с целью получить данные готического символа faihu (или fehu), "?", его кодовая точка будет U+10346.
Как же можно разместить его в "\uxxxx" или "\Uxxxxxxxx"? В "\uxxxx" эту кодовую точку вместить невозможно, поскольку она соответствует четырёхбайтному символу. А чтобы представить его в "\Uxxxxxxxx", придётся выровнять последовательность с левой стороны:
>>> "\U00010346"
'?'
Это также значит, что экранирующая последовательность "\Uxxxxxxxx" — единственная последовательность, способная вместить любой символ Юникода.
Прим. Вот код небольшой, но удобной функции, переводящей записи типа "U+10346" в приемлемый для Python формат с помощью str.zfill():
Пока что мы рассказали про 4 разные кодировки символов:
ASCII;
UTF-8;
UTF-16;
UTF-32.
Однако существует большое количество и других вариантов кодировки.
Один из примеров — Latin-1 (другое название ISO-8859-1). Это базовая кодировка для Hypertext Transfer Protocol (HTTP) в спецификации RFC 2616. Для Windows существует собственный вариант Latin-1, который называется cp1252.
Прим. Кодировка ISO-8859-1 всё ещё широко используется. Библиотека requests неукоснительно придерживается спецификации RFC 2616, используя её по умолчанию для содержимого отзывов HTTP/HTTPS. Если в заголовке Content-Type находится слово «text» и не выбрана другая кодировка, requests использует ISO-8859-1.
Полный список допустимых кодировок можно найти в документации модуля codecs, входящего в набор стандартных библиотек Python.
Среди этих кодировок стоит упомянуть ещё одну, зачастую весьма полезную. Это "unicode-escape". Если вы декодировали str и хотите быстро получить представление содержащихся в ней экранированных литералов Юникода, можно определить эту кодировку в .encode:
Хотя Python по умолчанию предполагает, что файлы и код созданы на основе кодировки UTF-8, вам, как программисту, не следует делать аналогичное предположение относительно сторонних данных.
Когда вы получаете данные в двоичном коде из внешних источников, из файла или по сетевому соединению, стоит проверить, указана ли кодировка. Если нет — вы можете уточнить.
Все операции ввода-вывода осуществляют в байтах, наборе нулей и единиц, пока вы не сообщите системе кодировку для преобразования этих данных в текст.
Приведём пример того, что может пойти не так. Допустим, вы подписаны на API, который передаёт вам рецепт блюда дня. Вы получаете его в формате bytes и раньше всегда без проблем декодировали с использованием .decode("utf-8") . Но именно в этот день часть рецепта выглядела так:
>>> data = b"\xbc cup of flour"
Похоже, нам потребуется мука, но сколько?
>>> data.decode("utf-8")
Traceback (most recent call last):
File "", line 1, in
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte
А вот и та самая неприятная ошибка UnicodeDecodeError. Подобное вполне может произойти, когда вы делаете предположение об используемой кодировке. Уточняем у разработчика ресурса, предоставляющего API. Выясняется, что полученный вами файл был закодирован с помощью Latin-1:
>>> data. decode("latin-1")
'¼ cup of flour'
Именно в этом и крылась проблема. В Latin-1 каждый символ кодируется одним байтом, в вот в UTF-8 символ «¼» требует два байта ("\xc2\xbc").
Как видите, делать предположения относительно кодировки полученных данных довольно рискованно. Обычно это UTF-8, однако в тех случаях, когда это не так, у вас могут возникнуть проблемы.
Если уж у вас нет другого выхода и кодировку приходится угадывать, обратите внимание на библиотеку chardet. В ней используются разработанные в Mozilla методы, позволяющие сделать обоснованное предположение насчёт кодировки данных. Однако учтите, что такие инструменты должны быть вашим последним средством, не стоит прибегать к ним, если есть возможность решить вопрос другим способом.
Всякая всячина: unicodedata
Нельзя не упомянуть также модуль unicodedata. Он позволяет взаимодействовать с базой данных символов Юникода (Unicode Character Database, UCD).
Итак, в этой статье вы познакомились со следующими концепциями кодировки символов в Python:
Фундаментальные принципы кодировки символов и систем счисления;
Целочисленные, двоичные, восьмеричные, шестнадцатеричные, строковые и байтовые литералы в Python;
Встроенные функции языка, работающие с кодировкой и системами счисления;
Особенности обработки текстовых и двоичных данных.
Дополнительные источники
Ещё больше информации можно получить из следующих материалов (на английском языке):
UTF-8 Everywhere Manifesto.
Joel Spolsky: Минимальный уровень знаний о Юникоде и наборах символов, требующийся каждому разработчику ПО (Без отговорок!).
David Zentgraf: Что обязательно должен знать о кодировках и наборах символов каждый программист для работы с текстом.
Mozilla: Комплексный подход к определению языков и кодировок.
Wikipedia.
John Skeet: Юникод и .NET.
Network Working Group, RFC 3629: UTF-8, формат преобразования ISO 10646.
Unicode Technical Standard #18: Регулярные выражения Юникода.
В документации языка нашему вопросу посвящены два раздела:
What’s New in Python 3.0;
Unicode HOWTO.
Перевод статьи Unicode & Character Encodings in Python: A Painless Guide
Набор символов US ASCII
Набор символов US ASCII
US ASCII, ANSI X3.4-1986 (Международная справочная версия ISO 646)
Коды от 0 до 31 и 127 (десятичные) являются непечатаемыми управляющими символами. Код 32 (десятичный) является непечатаемым символом пробела.
Коды от 33 до 126 (десятичные) являются печатаемыми графическими символами.
Легенда: Char Печатное представление символа, если таковой имеется
Декабрь Десятичный код символа
Row/Col Десятичное представление строки/столбца для символа
Oct Восьмеричный (с основанием 8) код символа
Hex Шестнадцатеричный (с основанием 16) код символа
Символ Dec Col/Row Oct Hex Название и описание 0 00/00 00 00 НОЛЬ (Ctrl-@) НОЛЬ
1 00/01 01 01 SOH (Ctrl-A) НАЧАЛО ЗАГОЛОВКА
2 00/02 02 02 STX (Ctrl-B) НАЧАЛО ТЕКСТА
3 00/03 03 03 ETX (Ctrl-C) КОНЕЦ ТЕКСТА
4 00/04 04 04 EOT (Ctrl-D) КОНЕЦ ПЕРЕДАЧИ
5 00/05 05 05 ENQ (Ctrl-E) ЗАПРОС
6 00/06 06 06 ПОДТВЕРЖДЕНИЕ (Ctrl-F) ПОДТВЕРЖДЕНИЕ
7 00/07 07 07 БЕЛ (Ctrl-G) БЕЛЛ (звуковой сигнал)
8 00/08 10 08 БС (Ctrl-H) BACKSPACE
900/09 11 09 HT (Ctrl-I) ГОРИЗОНТАЛЬНАЯ ВКЛАДКА
10 00/10 12 0A LF (Ctrl-J) ПЕРЕВОД СТРОКИ
11 00/11 13 0B VT (Ctrl-K) ВЕРТИКАЛЬНАЯ ЗАКЛАДКА
12 00/12 14 0C FF (Ctrl-L) ПОДАЧА ФОРМЫ
13 00/13 15 0D CR (Ctrl-M) ВОЗВРАТ КАРЕТКИ
14 00/14 16 0E SO (Ctrl-N) SHIFT OUT
15 00/15 17 0F SI (Ctrl-O) SHIFT IN
16 01/00 20 10 DLE (Ctrl-P) ESCAPE КАНАЛА ДАННЫХ
17 01/01 21 11 DC1 (Ctrl-Q) УПРАВЛЕНИЕ УСТРОЙСТВОМ 1 (XON)
18 01/02 22 12 DC2 (Ctrl-R) УПРАВЛЕНИЕ УСТРОЙСТВОМ 2
1901/03 23 13 DC3 (Ctrl-S) УПРАВЛЕНИЕ УСТРОЙСТВОМ 3 (XOFF)
20 01/04 24 14 DC4 (Ctrl-T) УПРАВЛЕНИЕ УСТРОЙСТВОМ 4
21 01/05 25 15 НЕТ (Ctrl-U) ОТРИЦАТЕЛЬНОЕ ПОДТВЕРЖДЕНИЕ
22 01/06 26 16 SYN (Ctrl-V) СИНХРОННЫЙ ХОЛОСТОЙ ХОД
23 01/07 27 17 ETB (Ctrl-W) КОНЕЦ БЛОКА ПЕРЕДАЧИ
24 01/08 30 18 МОЖЕТ (Ctrl-X) ОТМЕНА
25 01/09 31 19 EM (Ctrl-Y) КОНЕЦ СРЕДСТВА
26 01/10 32 1A ЗАМЕНА (Ctrl-Z) ЗАМЕНА
27 01/11 33 1B ESC (Ctrl-[) ESCAPE
28 01/12 34 1С ФС (Ctrl-\) РАЗДЕЛИТЕЛЬ ФАЙЛОВ
29) РАЗДЕЛИТЕЛЬ ЗАПИСИ
31 01/15 37 1F US (Ctrl-_) РАЗДЕЛИТЕЛЬ БЛОКОВ
( ) 32 02/00 40 20 ПРОБЕЛ
(!) 33 01. 02.41 21 ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК
("") 34 02/02 42 22 КАвычки
(#) 35 02/03 43 23 ЗНАК ЦИФРЫ
($) 36 02/04 44 24 ЗНАК ДОЛЛАРА
(%) 37 02/05 45 25 ЗНАК ПРОЦЕНТА
(&) 38 02/06 46 26 АМПЕРСАНД
(') 39 02/07 47 27 АПОСТРОФ
(() 40 02/08 50 28 ЛЕВАЯ СКОБКА
()) 41 02/0951 29 ПРАВАЯ СКОБКА
(*) 42 02/10 52 2A ЗВЕЗДОЧКА
(+) 43 02/11 53 2B ЗНАК ПЛЮС
(,) 44 02/12 54 2С ЗАПЯТАЯ
(-) 45 02/13 55 2D ДЕФИС, МИНУС
(.) 46 02/14 56 2E ПЕРИОД, ПОЛНАЯ ОСТАНОВКА
(/) 47 15.02 57 2Э СОЛИДУС, СЛЕШ
(0) 48 03/00 60 30 ЗНАЧНЫЙ НОЛЬ
(1) 49 03/01 61 31 ЦИФРА ЕДИНИЦА
(2) 50 03/02 62 32 ЦИФРА ДВА
(3) 51 03/03 63 33 ЦИФРА ТРИ
(4) 52 03/04 64 34 ЦИФРА ЧЕТЫРЕ
(5) 53 03/05 65 35 ЦИФРА ПЯТЬ
(6) 54 03/06 66 36 ЦИФРА ШЕСТЬ
(7) 55 03/07 67 37 ЦИФРА СЕДЬМАЯ
(8) 56 03/08 70 38 ЦИФРА ВОСЕМЬ
(9) 57 03/09 71 39 ЦИФРА ДЕВЯТЬ
(:) 58 03/10 72 3A ТОЛСТАЯ КИШКА
(;) 59 03/11 73 3B ТОЧКА С ЗАПЯТОЙ
(<) 60 03/12 74 3C ЗНАК "МЕНЬШЕ", ЛЕВАЯ УГЛОВАЯ СКОБКА
(=) 61 03/13 75 3D ЗНАК РАВНО
(>) 62 03/14 76 3E ЗНАК БОЛЬШЕ, ПРЯМАЯ СКОБКА
(?) 63 03/15 77 3F ВОПРОСИТЕЛЬНЫЙ ЗНАК
(@) 64 04/00 100 40 КОММЕРЧЕСКОЕ ОБЪЯВЛЕНИЕ НА ЗНАКЕ
(А) 65 04/01 101 41 ЗАГЛАВНАЯ БУКВА А
(B) 66 04/02 102 42 ЗАГЛАВНАЯ БУКВА B
(С) 67 04/03 103 43 ЗАГЛАВНАЯ БУКВА С
(D) 68 04/04 104 44 ЗАГЛАВНАЯ БУКВА D
(Э) 6905/04 105 45 ЗАГЛАВНАЯ БУКВА Е
(F) 70 04/06 106 46 ЗАГЛАВНАЯ БУКВА F
(G) 71 04/07 107 47 ЗАГЛАВНАЯ БУКВА G
(H) 72 04/08 110 48 ЗАГЛАВНАЯ БУКВА H
(I) 73 04/09 111 49 ЗАГЛАВНАЯ БУКВА I
(J) 74 04/10 112 4A ЗАГЛАВНАЯ БУКВА J
(К) 75 04/11 113 4B ЗАГЛАВНАЯ БУКВА K
(L) 76 04/12 114 4C ЗАГЛАВНАЯ БУКВА L
(М) 77 04/13 115 4D ЗАГЛАВНАЯ БУКВА М
(N) 78 04/14 116 4E ЗАГЛАВНАЯ БУКВА N
(О) 7915/04 117 4F ЗАГЛАВНАЯ БУКВА O
(P) 80 05/00 120 50 ЗАГЛАВНАЯ БУКВА P
(Q) 81 05/01 121 51 ЗАГЛАВНАЯ БУКВА Q
(R) 82 05/02 122 52 ЗАГЛАВНАЯ БУКВА R
(S) 83 05/03 123 53 ЗАГЛАВНАЯ БУКВА S
(Т) 84 05/04 124 54 ЗАГЛАВНАЯ БУКВА Т
(U) 85 05/05 125 55 ЗАГЛАВНАЯ БУКВА U
(V) 86 05/06 126 56 ЗАГЛАВНАЯ БУКВА V
(W) 87 05/07 127 57 ЗАГЛАВНАЯ БУКВА W
(X) 88 05/08 130 58 ЗАГЛАВНАЯ БУКВА X
(Д) 89) 94 05/14 136 5E CIRCUMFLEX АКЦЕНТ
(_) 95 05/15 137 5F НИЖНЯЯ ЛИНИЯ, ПОДЧИНКА
(`) 96 06/00 140 60 ГРАВИЙ АКЦЕНТ
(а) 97 06/01 141 61 СТРОЧНАЯ БУКВА а
(b) 98 06/02 142 62 СТРОЧНАЯ БУКВА b
(c) 99 03/06 143 63 СТРОЧНАЯ БУКВА c
(d) 100 06/04 144 64 СТРОЧНАЯ БУКВА d
(e) 101 06/05 145 65 СТРОЧНАЯ БУКВА e
(f) 102 06/06 146 66 СТРОЧНАЯ БУКВА f
(g) 103 07/06 147 67 СТРОЧНАЯ БУКВА g
(h) 104 06/08 150 68 СТРОЧНАЯ БУКВА h
(и) 105 06/09151 69 СТРОЧНАЯ БУКВА i
(j) 106 06/10 152 6A СТРОЧНАЯ БУКВА j
(k) 107 06/11 153 6B СТРОЧНАЯ БУКВА k
(л) 108 06/12 154 6C СТРОЧНАЯ БУКВА l
(m) 109 06/13 155 6D СТРОЧНАЯ БУКВА m
(n) 110 06/14 156 6E СТРОЧНАЯ БУКВА n
(o) 111 06/15 157 6F СТРОЧНАЯ БУКВА o
(p) 112 07/00 160 70 СТРОЧНАЯ БУКВА p
(q) 113 07/01 161 71 СТРОЧНАЯ БУКВА q
(r) 114 07/02 162 72 СТРОЧНАЯ БУКВА r
(s) 115 03/07 163 73 СТРОЧНАЯ БУКВА s
(t) 116 07/04 164 74 СТРОЧНАЯ БУКВА t
(u) 117 07/05 165 75 СТРОЧНАЯ БУКВА u
(v) 118 07/06 166 76 СТРОЧНАЯ БУКВА v
(ж) 11907/07 167 77 СТРОЧНАЯ БУКВА w
(x) 120 07/08 170 78 СТРОЧНАЯ БУКВА x
(y) 121 07/09 171 79 СТРОЧНАЯ БУКВА y
(z) 122 07/10 172 7A СТРОЧНАЯ БУКВА z
({) 123 07/11 173 7B ЛЕВАЯ ФИГУРНАЯ СКОБКА, ЛЕВАЯ СКОБКА
(|) 124 07/12 174 7C ВЕРТИКАЛЬНАЯ ЛИНИЯ, ВЕРТИКАЛЬНАЯ СТРУНА
(}) 125 13/07 175 7D ПРАВАЯ ФИГУРНАЯ СКОБКА, ПРАВАЯ СКОБКА
(~) 126 14/07 176 7E ТИЛЬДА
127 15/07 177 7F РУБ (Ctrl-?) РУБАУТ (УДАЛИТЬ)
Проект Кермит /
Колумбийский университет /
kermit@columbia. edu
кодов ASCII
кодов ASCII
Американский стандартный код для обмена информацией (ASCII)
это кодировка символов, которая возникла из телеграфии и телетайпов.
начала двадцатого века и была формализована для цифровых медиа в 1960-х годах. В своей первоначальной форме он определял 128 символов (0-127 или 0000000-
1 в двоичном формате).
включая некоторые управляющие символы, такие как «конец передачи». Различные расширенные версии включают неанглийские символы, но все, что выше
символ 127 следует считать ненадежным, если схема кодирования четко не определена. (Для надежного представления международных данных
рассмотрите возможность использования UTF-8 или UTF-16.)
Встроенные калькуляторы в MacOS и Windows предоставляют удобные преобразователи десятичных/двоичных/шестнадцатеричных чисел. У Mac есть поиск ASCII и Unicode.
Для обеспечения обратной совместимости 128 символов ASCII назначаются кодовые точки Unicode, которые совпадают с их кодами в более ранних стандартах. Таким образом, ASCII можно считать очень небольшим подмножеством Unicode.
В HTML любой символ может быть представлен с помощью [код десятичного символа] ; например код ASCII 33 = ! , который отображает «!» персонаж.
Значения также могут быть указаны в шестнадцатеричном виде с использованием [шестнадцатеричный код символа] ; например «!» также может быть записано как ! .
В URL-адресах HTML большинство символов можно представить с помощью % [шестнадцатеричный код символа] .
Например, символ пробела — это десятичное число 32 или шестнадцатеричное число 20, поэтому пробел в URL-адресе можно записать как 9.0040 %20 .
Многие символы также имеют именованные символы HTML, например & отображает символ «&» .
Регистр имеет значение для некоторых именованных символов, например ä = ä , Ä = Ä .
Набор символов ASCII определен в стандарте ANSI X3.4-1986. Набор символов Latin-1 (латинский алфавит № 1) определен в стандарте ISO 8859.-1. Мнемонические HTML-коды основаны на стандартном обобщенном языке разметки (SGML), определенном в стандарте ISO 8879.
См. примечания для символов 128+ ниже, так как базовый 7-битный стандарт ASCII только повышается
до 127, и более высокие коды требуют некоторой интерпретации, поскольку существуют различные стандарты того, как с ними обращаться. Другими словами, все, что выше 127, на самом деле не является ASCII.
Коды 1–31: управляющие символы
ASCII-код
Значение
Кодировка URL-адреса HTML
Специальные значения
0
nul
Null
1
soh
Start of heading
2
stx
Start of text
3
etx
Конец текста, Control-C/Прерывание
4
eot
End of transmission
5
enq
Enquiry
6
ack
Acknowledge
7
bel
Звонок (гудок)
8
bs
Backspace
9
ht
02
02
02
Горизонтальная вкладка
10
nl
%0A
Новая строка; терминатор строки Unix; 2-я часть терминатора строки Windows
11
vt
Вертикальная вкладка; Главная
12
NP
FormFeed (новая страница при печати)
13
CR
%0D
возврат карета; 1-я часть терминатора строки Windows
14
so
Shift out
15
si
Shift in
16
dle
Data link escape
17
dc1
Управление устройством 1
18
dc2
Управление устройством 2
00 180101 dc3
Device control 3
20
dc4
Device control 4
21
nak
Negative acknowledge
22
syn
Синхронный холостой ход
23
etb
Конец блока передачи
24
банка
Cancel
25
EM
Конец среды
26
, который был на месте, был из -за того, что было обнаружено, что было на месте, что было на месте. Использовался, что было на месте. Использовался, что было на месте. Использовался, что было на месте. Использовался, что было на месте.
27
esc
Escape
28
фс
разделитель файлов
Курсор вправо
29
Разделитель групп; gs
Курсор влево
30
rs
Разделитель записей; Курсор вверх
31
us
Разделитель единиц; Курсор вниз
Печатаемые символы 32-127:
Код (дес.)
Код (шестнадцатеричный)
Значение
HTML-символ URL-адреса
HTML-код (декабрь)
HTML-код (шестнадцатеричный)
HTML-мнемокод
32
20
(пробел)
%20
33
21
!
%21
!
!
!
34
22
»
%22
"
"
"
35
23
#
%23
#
#
#
36
24
$
%24
$
$
$;
37
25
%
%25
%
%
%
38
26
и
%26
&
&
&
39
27
‘
%27
'
'
‘
40
28
(
%28
(
(
9010 (9010)9
41
29
)
%29
)
)
)
42
2A
*
%2A
*
*
*
43
2B
+
%2B
+
+
+
44
2К
,
%2C
,
,
&запятая;
45
2D
—
%2D
-
-
46
2E
.
%2E
.
.
47
2F
/
%2F
/
/
/
48
30
0
%30
0
0
49
31
1
%31
1
1
50
32
2
%32
2
2
51
33
3
%33
3
3
52
34
4
%34
4
4
53
35
5
%35
5
5
54
36
6
%36
6
6
55
37
7
%37
7
7
56
38
8
%38
8
8
57
39
9
%39
9
9
58
3A
:
%3A
:
:
&двоеточие;
59
3Б
;
%3B
;
;
;
60
3C
<
%3C
<
<
<
61
3D
=
%3D
=
=
=
62
3E
>
%3E
>
>
>
63
3F
?
%3F
?
?
?
64
40
@
%40
@
@
@commat;
65
41
A
%41
A
A
66
42
B
%42
B
B
67
43
C
%43
C
C
68
44
D
%44
D
D
69
45
E
%45
E
E
70
46
F
%46
F
F
71
47
G
%47
G
G
72
48
H
%48
H
H
73
49
I
%49
I
I
74
4A
J
%4A
J
J
75
4B
K
%4B
K
K
76
4C
L
%4C
L
L
77
4D
M
%4D
M
M
78
4E
N
%4E
N
N
79
4F
O
%4F
O
O
80
50
P
%50
P
P
81
51
Q
%51
Q
Q
82
52
R
%52
R
R
83
53
S
%53
S
S
84
54
T
%54
T
T
85
55
U
%55
U
U
86
56
В
%56
V
V
87
57
W
%57
W
W
88
58
X
%58
X
X
89
59
Y
%59
Y
Y
90
5A
Z
%5A
Z
Z
91
5B
[
%5B
[
[ 9
%5E
^
^
&Шляпа;
95
5F
_
%5F
_
_
&нижняя штанга;
96
60
`
%60
`
`
&грав;
97
61
a
%61
a
a
98
62
b
%62
b
b
99
63
c
%63
c
c
100
64
d
%64
d
d
101
65
e
%65
e
e
102
66
f
%66
f
f
103
67
г
%67
g
g
104
68
ч
%68
h
h
105
69
i
%69
i
i
106
6A
j
%6A
j
j
107
6B
k
%6B
k
k
108
6C
l
%6C
l
l
109
6D
м
%6D
m
m
110
6E
n
%6E
n
n
111
6F
или
%6F
o
o
112
70
p
%70
p
p
113
71
q
%71
q
q
114
72
r
%72
r
r
115
73
s
%73
s
s
116
74
t
%74
t
t
117
75
u
%75
u
u
118
76
v
%76
v
v
119
77
w
%77
w
w
120
78
x
%78
x
x
121
79
г
%79
y
y
122
7A
z
%7A
z
z
123
7B
{
%7B
{
{
{
124
7С
|
%7C
|
|
&верт;
125
7D
}
%7D
}
}
}
126
7E
~
%7E
~
~
&тильда;
127
дел
Коды 128-255:
Поскольку ASCII строго доходит до 127 (т. е. 7 бит или1 в двоичном формате), коды символов выше этого
будет интерпретироваться по-разному в зависимости от набора символов. Хотя мы могли бы неофициально ссылаться на «коды ASCII»,
следующие 8-битные коды символов не являются частью ASCII.
Если явно не указан набор символов, браузеры и другое программное обеспечение должны вернуться к настройкам по умолчанию, таким как
Международные настройки для рабочего стола человека, просматривающего страницу, или любые настройки по умолчанию, встроенные в приложение,
что может дать непредсказуемые результаты.
UTF-8 — это стандарт кодировки символов, согласно которому первые 128
символы (0-127) представлены одним байтом (так же, как классический ASCII), а более высокие коды представлены несколькими байтами.
Не все помнят его использовать.
Даже если они есть, не каждый шрифт содержит все возможные символы. Поэтому символ или многобайтовый символ может быть
правильно кодируется и распознается браузером, но не отображается в Verdana.
Эта страница указывает кодировку utf-8 в заголовке HTML, чтобы дать браузерам некоторую подсказку, однако
это не означает, что для таких символов, как #129, существует согласованное соглашение об отображении.
Символы в диапазоне от 128 до 158 особенно ненадежны.
Код (декабрь)
Код (шестнадцатеричный)
Значение
HTML-символ URL-адреса
HTML-код (декабрь)
HTML-код (шестнадцатеричный)
HTML-мнемокод
128
80
%80
€
Часто используется для валюты евро, но не поддерживается — используйте € или &евро;
129
81
%81
130
82
%82
‚
‚
131
83
%83
ƒ
132
84
%84
„
„
133
85
%85
…
134
86
%86
†
†
135
87
%87
‡
&Кинжал;
136
88
%88
ˆ
137
89
%89
‰
‰
138
8A
%8A
Š
139
8B
%8B
‹
‹
140
8C
%8C
Œ
141
8D
%8D
142
8E
%8E
Ž
143
8F
%8F
144
90
%90
145
91
%91
‘
‘
146
92
%92
’
’
147
93
%93
“
“
148
94
%94
”
”
149
95
%95
•
&бык;
150
96
%96
–
û (для û )
151
97
%97
—
152
98
%98
˜
153
99
%99
™
(товар — но и торговля; или ™ имеет лучшую поддержку)
За 8 битами можно все. Ниже приводится подборка кодов, исчерпывающе задокументированных в
все2.com/e2node/справочник по символам HTML и
dev.w3.org/html5/html-автор/charref.
(Числа увеличиваются до 10 000, где они представляют собой многобайтовые дальневосточные алфавиты,
шрифт Брайля,
фонетический и
математические символы,
Смайлики и т.д.)
Какую кодировку символов следует использовать для содержимого и как ее применить к моему содержимому?
Содержимое состоит из последовательности символов. Символы представляют собой буквы алфавита, знаки препинания и т. д. Но содержимое хранится в компьютере в виде последовательности байтов, представляющих собой числовые значения. Иногда для представления одного символа используется более одного байта. Подобно кодам, используемым в шпионаже, способ преобразования последовательности байтов в символы зависит от того, какой ключ использовался для кодирования текста. В связи с этим 9Ключ 0008 называется кодировкой символов .
Эта статья предлагает простые советы о том, какую кодировку символов использовать для вашего контента и как ее применять, т.е. как на самом деле создать документ в этой кодировке.
Если вам нужно лучше понять, что такое символы и кодировки символов, см. статью Кодировки символов для начинающих .
Быстрый ответ
Выберите UTF-8 для всего содержимого и рассмотрите возможность преобразования любого содержимого в устаревших кодировках в UTF-8.
Если вы действительно не можете использовать кодировку Unicode, убедитесь, что выбранная вами кодировка страницы широко поддерживается браузерами и что эта кодировка не входит в список кодировок, которых следует избегать согласно последним спецификациям.
Проверьте, не повлияют ли на ваш выбор настройки HTTP-сервера.
В дополнение к объявлению кодировки документа внутри документа и/или на сервере вам необходимо сохранить текст в этой кодировке, чтобы применить ее к вашему контенту.
Разработчики также должны убедиться, что различные части системы могут взаимодействовать друг с другом.
Детали
Применение кодировки к содержимому
Авторы контента должны объявить кодировку символов своих страниц, используя один из методов, описанных в Объявление кодировок символов в HTML .
Однако важно понимать, что простое объявление кодировки внутри документа или на сервере фактически не изменит байты; вам нужно сохранить текст в этой кодировке , чтобы применить его к вашему контенту. (Объявление просто помогает браузеру интерпретировать последовательности байтов, в которых хранится текст.)
При необходимости установите UTF-8 по умолчанию для новых документов в вашем редакторе. На рисунке ниже показано, как это сделать в настройках редактора, такого как Dreamweaver.
Для получения информации о «Форме нормализации Unicode» см. Нормализация в HTML и CSS . Сведения о «подписи Unicode (BOM)» см. в статье Знак порядка байтов (BOM) в HTML .
Вам также может потребоваться убедиться, что ваш сервер обслуживает документы с правильными объявлениями HTTP, поскольку в противном случае он переопределит информацию в документе (см. ниже).
Разработчики также должны убедиться, что различные части системы могут взаимодействовать друг с другом. Веб-страницы должны иметь возможность беспрепятственно взаимодействовать с внутренними сценариями, базами данных и т.п. Конечно, все они лучше всего работают и с UTF-8. Разработчики могут найти подробный набор вопросов, которые следует учитывать, в статье Миграция на Unicode .
Зачем использовать кодировку UTF-8?
HTML-страница может быть только в одной кодировке. Вы не можете кодировать разные части документа в разных кодировках.
Кодировка на основе Unicode, такая как UTF-8, может поддерживать многие языки и может вмещать страницы и формы на любом сочетании этих языков. Его использование также
устраняет необходимость в логике на стороне сервера для индивидуального определения кодировки символов для каждой обслуживаемой страницы или каждой входящей отправки формы.
Это значительно снижает сложность работы с многоязычным сайтом или приложением.
Кодировка Unicode также позволяет смешивать гораздо больше языков на одной странице, чем любая другая кодировка.
Поддержка данной кодировки, даже кодировки Unicode, не обязательно означает, что пользовательский агент будет правильно отображать текст. Многочисленные шрифты, такие как арабский и индийский, требуют дополнительных правил для преобразования последовательности символов в памяти в соответствующую последовательность глифов шрифта для отображения.
В наши дни любые барьеры для использования Unicode очень низки. Фактически, в январе 2012 года Google сообщил, что более 60% Интернета в их выборке из нескольких миллиардов страниц теперь используют UTF-8. Добавьте к этому цифру для веб-страниц, состоящих только из ASCII (поскольку ASCII является подмножеством UTF-8), и эта цифра возрастет примерно до 80%.
Существует три различных кодировки символов Unicode: UTF-8, UTF-16 и UTF-32. Из этих трех для веб-контента следует использовать только кодировку UTF-8. Спецификация HTML5 гласит: «Авторам рекомендуется использовать UTF-8. Средства проверки соответствия могут посоветовать авторам не использовать устаревшие кодировки. Инструменты разработки должны по умолчанию использовать UTF-8 для вновь созданных документов».
Обратите внимание, в частности, что все символы ASCII в UTF-8 используют те же байты, что и кодировка ASCII, что часто способствует взаимодействию и обратной совместимости.
Принимая во внимание заголовок HTTP
Любое объявление кодировки символов в заголовке HTTP переопределяет объявления внутри страницы. Если заголовок HTTP объявляет кодировку, отличную от той, которую вы хотите использовать для своего контента, это вызовет проблему, если вы не сможете изменить настройки сервера.
Возможно, у вас нет контроля над объявлениями, которые идут с заголовком HTTP, и вам, возможно, придется обратиться за помощью к людям, управляющим сервером. С другой стороны, иногда есть способы исправить проблемы на сервере, если у вас ограниченный доступ к файлам настройки сервера или вы создаете страницы с помощью языков сценариев. Например, см. 1069.77 Установка параметра набора символов HTTP для получения дополнительной информации о том, как изменить информацию о кодировке либо локально для набора файлов на сервере, либо для содержимого, созданного с использованием языка сценариев.
Обычно перед этим необходимо проверить, действительно ли заголовок HTTP объявляет кодировку символов. Вы можете использовать средство проверки интернационализации W3C, чтобы узнать, какая кодировка символов, если таковая имеется, указана в заголовке HTTP. В качестве альтернативы статье Проверка заголовков HTTP указывает на некоторые другие инструменты для проверки информации о кодировке, передаваемой сервером.
Дополнительная информация
Информация в этом разделе относится к вещам, которые обычно вам не нужны, но которые включены сюда для полноты картины.
Что делать, если я не могу использовать кодировку UTF-8?
Если вы действительно не можете избежать использования кодировки символов, отличной от UTF-8, вам придется выбирать из ограниченного набора имен кодировок, чтобы обеспечить максимальную совместимость и максимально длительный срок читаемости вашего контента, а также свести к минимуму уязвимости системы безопасности.
До недавнего времени реестр IANA был местом, где можно было найти имена для кодировок. Реестр IANA обычно включает несколько имен для одной и той же кодировки. В этом случае вы должны использовать имя, обозначенное как
«предпочтительный».
Новая спецификация Encoding теперь содержит список, протестированный на реальных реализациях браузеров. Список можно найти в таблице в разделе Кодировки. Лучше всего использовать имена из левого столбца этой таблицы.
Обратите внимание, однако, , что наличие имени в любом из этих источников не обязательно означает, что можно использовать эту кодировку. В следующем разделе приведены кодировки, которых следует избегать.
Избегайте этих кодировок
Спецификация HTML5 указывает на ряд кодировок, которых следует избегать.
Документы не должны использовать JIS_C6226-1983 , JIS_X0212-1990 , HZ-GB-2312 , JOHAB (кодовая страница Windows 1361), кодировки на основе ISO-2022 или кодировки на основе EBCDIC . Это связано с тем, что они позволяют кодовым точкам ASCII представлять символы, отличные от ASCII, что представляет угрозу безопасности.
Документы также не должны использовать кодировки CESU-8 , UTF-7 , BOCU-1 или SCSU , поскольку они никогда не предназначались для веб-контента, а спецификация HTML5 запрещает браузерам распознавать их.
Спецификация также настоятельно не рекомендует использовать UTF-16 , а использование UTF-32 «особенно не рекомендуется».
Также следует избегать других кодировок символов, перечисленных в спецификации Encoding . К ним относятся кодировки Big5 и EUC-JP , которые имеют проблемы с совместимостью. ISO-8859-8 (кодировка на иврите для визуально упорядоченного текста) также следует избегать в пользу кодировки, которая работает с логически упорядоченным текстом (т. е. UTF-8, в противном случае ISO-8859-8-и).
Кодировка , заменяющая , указанная в спецификации Encoding , на самом деле не является кодировкой; это запасной вариант, который сопоставляет каждый октет с кодовой точкой Unicode U+FFFD REPLACEMENT CHARACTER. Очевидно, что передавать данные в такой кодировке бесполезно.
Кодировка x-user-defined представляет собой однобайтовую кодировку, младшая половина которой представляет собой ASCII, а верхняя половина отображается в области частного использования Unicode (PUA). Как и в случае с PUA в целом, лучше избегать использования этой кодировки в общедоступном Интернете, поскольку она наносит ущерб функциональной совместимости и долгосрочному использованию.
Дальнейшее чтение
Начать? Знакомство с наборами символов и кодировками
Учебное пособие, Обработка кодировок символов в HTML и CSS
Ссылки по теме, Создание HTML и CSS
символов
Выбор кодировки символов
Изменение кодировки документа
Проверка кодировки документа
Таблица ASCII/ISO 8859 (Latin-1)
Объекты US-ASCII
Управляющие символы
Символ Ссылка
Шестигранник
Символ
Имя объекта
Описание
00 9_
разделитель блоков
США
Специальные символы и цифры
Символ Ссылка
Шестигранник
Символ
Имя объекта
Описание
20
&sp;
пробел
!
21
!
!
восклицательный знак
"
22
»
"
двойные кавычки
#
23
#
#
знак номера, фунт
$
24
$
$
знак доллара
%
25
%
%
знак процента
&
26
и
&ампер;
амперсанд
'
27
‘
‘
апостроф, одинарная кавычка
(
28
(
(пар;
левая скобка
)
29
)
)
правая скобка
*
2А
*
*
звездочка
+
2Б
+
+
плюс
,
2С
,
&запятая;
запятая
-
2Д
—
&минус; &дефис;
минус, дефис
.
2Е
.
.
точка, десятичная точка, точка
/
2Ф
/
/
косая черта, косая черта, солид
0
30
0
цифра 0
1
31
1
цифра 1
2
32
2
цифра 2
3
33
3
цифра 3
4
34
4
цифра 4
5
35
5
цифра 5
6
36
6
цифра 6
7
37
7
цифра 7
8
38
8
цифра 8
9
39
9
цифра 9
:
3А
:
&двоеточие;
двоеточие
;
3Б
;
;
точка с запятой
<
3С
<
<
знак меньше
=
3D
=
=
знак равенства
>
3Е
>
>
знак «больше»
?
3F
?
?
знак вопроса
Заглавные буквы
Символ Ссылка
Шестигранник
Символ
Имя объекта
Описание
@
40
@
@
реклама на вывеске
A
41
А
заглавная А
B
42
Б
заглавная Б
C
43
С
заглавная С
D
44
Д
заглавная Д
E
45
Е
заглавная Е
F
46
Ф
заглавная Ф
G
47
Г
заглавная буква G
H
48
Х
заглавная Н
I
49
я
заглавная я
J
4А
Дж
заглавная J
K
4Б
К
заглавная К
L
4С
л
заглавная Л
M
4Д
М
заглавная М
N
4Е
Н
столица N
O
4Ф
О
заглавная О
P
50
Р
заглавная Р
Q
51
Q
заглавная Q
R
52
Р
капитал Р
S
53
С
заглавная S
T
54
Т
заглавная Т
U
55
У
заглавная У
V
56
В
заглавная буква В
W
57
Вт
заглавная буква W
X
58
Х
заглавная х
Y
59
Д
заглавная буква Y
Z
5А
З
заглавная Z
[
5Б
[
[lqb;
левая квадратная скобка
	
ˆ
распорка циркумфлекс акцент
_
5Ф
_
&нижняя штанга; ―
пробел подчеркивание, нижняя строка, горизонтальная черта
FutureLearn использует куки-файлы для повышения удобства использования веб-сайта. Все файлы cookie, кроме строго необходимых, в настоящее время отключены для этого браузера. Включите JavaScript, чтобы применить настройки файлов cookie для всех необязательных файлов cookie. Вы можете ознакомиться с политикой FutureLearn в отношении файлов cookie здесь.
ASCII и UTF-8 — две современные системы кодирования текста. Оба объясняются в этом видео с участием Кейтлин Мерри.
Просмотреть расшифровку
2.3
В 1963 году был принят Американский стандартный код для обмена информацией или ASCII, чтобы информацию можно было переводить между компьютерами. Он был разработан для создания международного стандарта кодирования латинского алфавита; превращая двоичные числа в текст на экране вашего компьютера. ASCII кодирует символы в семь битов двоичных данных. Поскольку каждый бит может быть либо 1, либо 0, всего получается 128 возможных комбинаций. Каждое из этих двоичных чисел можно преобразовать в десятичное число от 0 до 127. Например,1 в двоичном формате равняется 65 в десятом. В ASCII каждое десятичное число соответствует символу, который мы хотим закодировать. От прописных и строчных букв до цифр, символов и компьютерных команд.
55,7
Например, 65 соответствует A в верхнем регистре. j в нижнем регистре равно 106 или 1
в двоичном формате. Или 0
равно 33, что кодирует символ восклицательного знака. Вот как hello кодируется в двоичный код с использованием ASCII. [H
0 E1 L0 L0 O
1] Но что, если мы используем 8-битные байты? Мы просто ставим 0 перед двоичным числом. Итак, в 8-битном режиме привет выглядит так. Давайте посмотрим на все это на практике. На вашем компьютере откройте текстовый редактор Блокнот. Введите сообщение «Данные прекрасны» и сохраните его.
109.1
Посмотрите на размер файла. 18 байт. Теперь добавьте еще одно слово: Дейта такая красивая. Вы добавили три новых символа S, O и пробел. Если вы еще раз посмотрите на размер файла, то увидите, что он увеличился на 3 байта. Таким образом, ASCII использует 7 бит для представления 128 символов. Но когда были разработаны 8-битные компьютеры, дополнительная цифра означала, что теперь можно было закодировать 256 символов. Проблемы возникли, когда страны начали непоследовательно использовать эти дополнительные символы. Таким образом, разные числа представляли разные символы в разных языках. Япония создала несколько систем кодирования своего языка, которые различаются в зависимости от аппаратного обеспечения. Сообщения, отправляемые с одного японского компьютера на другой, становились искаженными и нечитаемыми, когда компьютер неправильно переводил данные.
161
Ошибки в преобразовании японских иероглифов стали такой проблемой, что у них даже есть название для этого, моджибаке. Эта проблема стала намного хуже с изобретением всемирной паутины. Для решения проблем, связанных с отправкой документов на разных языках по всему миру, был создан консорциум для создания всемирного стандарта Unicode. Как и в ASCII, в Unicode каждому символу присваивается определенный номер. Unicode также использует старую кодировку ASCII для английского языка. Таким образом, A в верхнем регистре по-прежнему равен 65. Но Unicode кодирует гораздо больше, чем 100 000 символов в большинстве языков. Для этого он использует не 8 бит данных, а 32. Но 65, закодированные в 32 бита, выглядят так, что занимает много места.
211.5
Кроме того, многие старые компьютеры интерпретируют восемь нулей подряд как конец строки символов, также называемой нулем. Это означает, что они не будут отправлять никаких символов, которые появятся позже. Метод кодирования Unicode, UTF8, решает эти проблемы. Вплоть до числа 127 значение ASCII остается неизменным. Так что A по-прежнему 0
1. Для всего, что выше 127, UTF8 разделяет код на два байта. Он добавляет 110 к первому байту и 10 ко второму байту. Затем вы просто заполняете двоичный код для промежуточных битов. Например, число 325 равно 00101, которое вставляется вот так. Это работает для первых 4,096 символов. После этого добавляется еще один байт.
268.2
И еще 1 добавляется в начале первого байта, вот так. Это дает вам 16 дополнительных битов для вашего двоичного кода. На самом деле вы можете получить до 7 байтов данных, которые выглядят так. Таким образом, UTF8 позволяет избежать проблемы с 8 нулями. И он обратно совместим со старой системой ASCII. И это краткое изложение ASCII и UTF8, двух важных стандартов, которые определяют, как символы кодируются из единиц и нулей в цифровой текст, который вы просматриваете каждый день.
Два стандарта кодирования символов определяют, как символы декодируются из единиц и нулей в текст, который вы видите на экране прямо сейчас, и в различные языки, просматриваемые каждый день в World Wide Web. Этими двумя стандартами кодирования являются ASCII и Unicode.
ASCII
Американский стандартный код для обмена информацией (ASCII) был разработан для создания международного стандарта кодирования латинского алфавита. В 1963 году был принят ASCII, чтобы информацию можно было интерпретировать между компьютерами; представляющие строчные и заглавные буквы, цифры, символы и некоторые команды. Поскольку ASCII кодируется с использованием единиц и нулей, системы счисления с основанием 2, он использует семь битов. Семь бит позволяют 2 в степени 7 = 128 возможных комбинаций цифр для кодирования символа.
Таким образом,
ASCII обеспечил возможность кодирования 128 важных символов:
Как работает кодировка ASCII
Вы уже знаете, как преобразовывать десятичные числа в двоичные
Теперь вам нужно превратить буквы в двоичные числа
Каждому символу соответствует десятичное число (например, A → 65)
ASCII использует 7 бит
Мы используем первые 7 столбцов таблицы преобразования для создания 128 различных чисел (от 0 до 127)
Например,1 дает нам число 65 ( 64 + 1 ), которое соответствует букве «А».
64
32
16
8
4
2
1
1
0
0
0
0
0
1
Вот как «HELLO» закодировано в ASCII в двоичном виде:
Латинский символ
ASCII-код
Н
0
Е
1
Л
0
Л
0
О
1
Применим эту теорию на практике:
Открыть Блокнот или любой другой обычный текстовый редактор
Введите сообщение и сохраните его, например. «данные прекрасны»
Посмотрите на размер файла — у меня 18 байт
Теперь добавьте еще одно слово, например. «данные такие красивые»
Если вы еще раз посмотрите на размер файла, то увидите, что он изменился — теперь мой файл стал на 3 байта больше (SO[SPACE]: «S», «O» и пробел)
Unicode и UTF-8
Поскольку символы ASCII кодируются 7 битами, переход на 8-битную вычислительную технологию означал использование одного дополнительного бита. С этой дополнительной цифрой Extended ASCII кодирует до 256 символов. Однако возникшая проблема заключалась в том, что страны, использующие разные языки, по-разному использовали эту дополнительную возможность кодирования. Многие страны добавили свои собственные дополнительные символы, и разные числа представляли разные символы на разных языках. Япония даже создала несколько систем кодирования японского языка в зависимости от аппаратного обеспечения, и все эти методы были несовместимы друг с другом. Таким образом, когда сообщение было отправлено с одного компьютера на другой, полученное сообщение могло стать искаженным и нечитаемым; японские системы кодирования символов были настолько сложны, что даже когда сообщение было отправлено с одного типа японского компьютера на другой, происходило нечто, называемое «модзибаке»:
Проблема несовместимых систем кодирования стала более актуальной с изобретением Всемирной паутины, поскольку люди обменивались цифровыми документами по всему миру, используя несколько языков. Чтобы решить эту проблему, Консорциум Unicode создал универсальную систему кодирования под названием Unicode . Юникод кодирует более 100 000 символов, охватывая все символы, которые вы найдете в большинстве языков. Unicode присваивает каждому символу определенное число, а не двоичную цифру. Но были некоторые проблемы с этим, например:
Для кодирования 100 000 символов потребуется около 32 двоичных разрядов. Unicode использует ASCII для английского языка, поэтому A по-прежнему равно 65. Однако при 32-битной кодировке буква A будет двоичным представлением 0000000000000000000000000000000000001. Это тратит впустую много ценного пространства!
Многие старые компьютеры интерпретируют восемь нулей подряд (ноль) как конец строки символов. Таким образом, эти компьютеры не будут отправлять символы, следующие за восемью нулями подряд (они не будут отправлять букву A, если она представлена как 00000000000000000000000000000000000001).
Метод кодирования Unicode UTF-8 решает следующие проблемы: — до символа с номером 128 используется обычное значение ASCII (например, A равно 01) — для любого символа за пределами 128 UTF-8 разделяет код в два байта и добавление «110» к началу первого байта, чтобы показать, что это начальный байт, и «10» к началу второго байта, чтобы показать, что он следует за первым байтом.
Итак, для каждого символа после числа 128 у вас есть два байта:
[110xxxxx] [10xxxxxx]
И вы просто заполните двоичный код для числа между ними:
[11] [
01] (это число 325 → 00101)
Это работает для первых 2048 символов. Для символов сверх этого добавляется еще одна «1» в начале первого байта, а также используется третий байт:
[1110xxxx] [10xxxxxx] [10xxxxxx]
Это дает вам 16 пробелов для двоичного кода. Таким образом, UTF-8 достигает четырех байтов:
[11110xxx] [10xxxxxx] [10xxxxxx] [10xxxxxx]
Таким образом, UTF-8 позволяет избежать проблем, упомянутых выше, а также необходимости индекса, и позволяет декодировать символы из двоичной формы в обратном порядке (т. е. имеет обратную совместимость).
Занятия в классе
Есть много занимательных занятий по обучению кодированию символов. Мы включили два упражнения ниже, чтобы вы могли попробовать их в своем классе. Какие у вас есть главные советы по обучению кодированию символов? Поделитесь ими в комментариях!
Перевод секретных сообщений : разместить короткое секретное сообщение в ASCII в разделе комментариев и перевести или ответить на ASCII-сообщения других участников
Бинарные браслеты : создавайте браслеты, используя разноцветные бусины для обозначения единиц и нулей и написания инициала или имени в ASCII.
Эта статья взята из бесплатного онлайн-ресурса
Представление данных в вычислениях: оживление данных
Создано
Присоединяйся сейчас
Наша цель — изменить доступ к образованию.
Мы предлагаем широкий выбор курсов ведущих университетов и учреждений культуры со всего мира. Они предоставляются поэтапно и доступны на мобильных устройствах, планшетах и компьютерах, поэтому вы можете приспособить обучение к своей жизни.
Мы считаем, что обучение должно быть приятным, социальным опытом, поэтому наши курсы дают возможность обсудить то, что вы изучаете, с другими, помогая вам делать новые открытия и формировать новые идеи. Вы можете открыть новые возможности с неограниченным доступом к сотням кратких онлайн-курсов в течение года, подписавшись на наш безлимитный пакет. Развивайте свои знания в ведущих университетах и организациях.
Узнайте больше о том, как FutureLearn меняет доступ к образованию
Вставка латинских символов и символов ASCII или Unicode
Excel для Microsoft 365 Outlook для Microsoft 365 PowerPoint для Microsoft 365 Publisher для Microsoft 365 Excel 2021 Outlook 2021 PowerPoint 2021 Publisher 2021 Visio Professional 2021 Visio Standard 2021 OneNote 2021 Excel 2019Outlook 2019 PowerPoint 2019 Publisher 2019 Visio Professional 2019 Visio Standard 2019 Excel 2016 Outlook 2016 PowerPoint 2016 OneNote 2016 Publisher 2016 Visio Professional 2016 Visio 2016 Excel 2013 Outlook 2013 PowerPoint 2013 OneNote 2013 Publisher 2013 Visio 2013 Outlook 2010 PowerPoint 2010 Publisher 2010 2010 Visio 2010 Visio Standard 2010 Больше. ..Меньше
Кодировка символов
ASCII и Unicode позволяет компьютерам хранить и обмениваться данными с другими компьютерами и программами. Ниже приведены списки часто используемых символов на основе латиницы ASCII и Unicode. Символы Unicode для письменностей, не основанных на латинице, см. в разделе Таблицы кодов символов Unicode по сценариям.
В этой статье
Вставка символа ASCII или Unicode в документ
Коды символов общих символов
Общие коды диакритических символов
Общие коды символов лигатуры
Непечатаемые управляющие символы ASCII
Дополнительная информация
Вставка символа ASCII или Unicode в документ
Если вам нужно ввести только несколько специальных символов или символов, вы можете использовать карту символов или использовать сочетания клавиш. См. приведенные ниже таблицы или список символов ASCII в разделе «Сочетания клавиш для международных символов».
Примечания:
Многие языки содержат символы, которые не могут быть объединены в 256-символьный расширенный набор ACSII. Таким образом, существуют варианты ASCII и Unicode, охватывающие региональные символы и символы, см. Таблицы кодов символов Unicode по сценариям.
Если у вас возникли проблемы с вводом кодов символов для нужных вам символов, попробуйте использовать карту символов.
Вставка символов ASCII
Чтобы вставить символ ASCII, нажмите и удерживайте клавишу ALT при вводе кода символа. Например, чтобы вставить символ градуса (º), нажмите и удерживайте клавишу ALT, одновременно набирая 0176 на цифровой клавиатуре.
Вы должны использовать цифровую клавиатуру для ввода цифр , а не клавиатуру. Убедитесь, что клавиша NUM LOCK включена, если ваша клавиатура требует ввода цифр на цифровой клавиатуре.
Вставка символов Unicode
Чтобы вставить символ Unicode, введите код символа, нажмите ALT, а затем нажмите X. Например, чтобы ввести символ доллара ($), введите 0024, нажмите ALT, а затем нажмите X. Дополнительные коды символов Unicode см. Таблицы кодов символов Unicode по сценарию.
Важно: Некоторые программы Microsoft Office, такие как PowerPoint и InfoPath, не могут преобразовывать коды Unicode в символы. Если вам нужен символ Unicode и вы используете одну из программ, не поддерживающих символы Unicode, используйте карту символов, чтобы ввести нужные вам символы.
Примечания:
Если ALT+X преобразует неправильный код символа в Unicode, выберите правильный код символа, прежде чем нажимать ALT+X.
В качестве альтернативы перед правильным кодом символа можно поставить текст «U+». Например, ввод «1U+B5» и нажатие ALT+X всегда возвращает текст «1µ», а ввод «1B5» и нажатие ALT+X возвращает текст «Ƶ».
Использование карты символов
Карта символов
— это программа, встроенная в Microsoft Windows, которая позволяет просматривать символы, доступные в выбранном шрифте.
Используя карту символов, вы можете копировать отдельные символы или группу символов в буфер обмена и вставлять их в любую программу, которая может их отображать. Чтобы открыть карту символов:
В Windows 10: Введите «персонаж» в поле поиска на панели задач и выберите «Карта символов» в результатах.
В Windows 8: Найдите слово «персонаж» на начальном экране и выберите «Карта символов» в результатах.
В Windows 7: Щелкните Пуск , выберите Все программы , выберите Аксессуары , выберите Системные инструменты , а затем щелкните Карта символов .
Символы сгруппированы по шрифту. Щелкните список шрифтов, чтобы выбрать набор символов. Чтобы выбрать символ, щелкните символ, щелкните Выберите , щелкните правой кнопкой мыши в документе в том месте, где вы хотите ввести символ, а затем щелкните Вставить .
Верх страницы
Коды символов общих символов
Для получения дополнительных символов см. карту символов, установленную на вашем компьютере, коды символов ASCII или таблицы кодов символов Unicode по сценарию.
Полный список глифов и их кодов символов см. в Карте символов.
Глиф
Код
Глиф
Код
Ã
ALT+0195
х
ALT+0229
Å
ALT+143
х
ALT+134
Ä
ALT+142
и
ALT+132
À
ALT+0192
и
ALT+133
Á
ALT+0193
а
ALT+160
Â
ALT+0194
—
ALT+131
Ç
ALT+128
и
ALT+135
Ч
010C+ALT+X
č
010D+ALT+X
Э
ALT+144
и
ALT+130
È
ALT+0200
и
ALT+138
К
ALT+202
ê
ALT+136
Ë
ALT+203
—
ALT+137
÷
0114+ALT+X
—
0115+ALT+X
→
011E+ALT+X
–
011F+ALT+X
→
0122+ALT+Х
—
0123+ALT+X
О
ALT+0207
ï
ALT+139
О
ALT+0206
î
ALT+140
Í
ALT+0205
–
ALT+161
М
ALT+0204
х
ALT+141
С
ALT+165
–
ALT+164
. ..
ALT+153
или
ALT+148
Ô
ALT+212
х
ALT+147
О
014C+ALT+X
–
014D+ALT+X
Т
ALT+0210
х
ALT+149
О
ALT+0211
—
ALT+162
Ø
ALT+0216
ø
00F8+ALT+X
×
015C+ALT+X
№
015D+ALT+X
Ş
015E+ALT+X
ş
015F+ALT+X
О
ALT+154
ü
ALT+129
→
ALT+016A
–
016B+ALT+X
Û
ALT+0219
х
ALT+150
Ù
ALT+0217
х
ALT+151
Ú
00DA+ALT+X
ú
ALT+163
Ÿ
0159+ALT+X
ÿ
ALT+152
Верх страницы
Коды символов для символов лигатуры
Дополнительные сведения о типографских лигатурах см. в разделе Типографские лигатуры. Полный список лигатур и их кодов символов см. в Карте символов.
Глиф
Код
Глиф
Код
Æ
ALT+0198
æ
ALT+0230
ß
ALT+0223
ß
ALT+225
–
ALT+0140
–
ALT+0156
ʩ
02A9+ALT+X
ʣ
02A3+ALT+X
ʥ
02A5+ALT+X
ʪ
02AA+ALT+X
ʫ
02AB+ALT+X
ʦ
0246+ALT+X
ʧ
02A7+ALT+X
Љ
0409+ALT+Х
Ю
042E+ALT+X
Њ
040А+АЛТ+Х
Ѿ
047E+ALT+x
Ы
042B+ALT+X
Ѩ
0468+ALT+Х
Ѭ
049C+ALT+X
ﷲ
FDF2+ALT+X
Верх страницы
Непечатаемые управляющие символы ASCII
Номера таблиц ASCII 0–31 назначаются для управляющих символов, используемых для управления некоторыми периферийными устройствами, такими как принтеры. Например, 12 представляет функцию подачи формы/новой страницы. Эта команда указывает принтеру перейти к началу следующей страницы.
1069Таблица 94 непечатаемых управляющих символов ASCII