ASCII
ASCII (англ. American standard code for information interchange, [ˈæs.ki][1]) — название таблицы (кодировки, набора), в которой некоторым распространённым печатным и непечатным символам сопоставлены числовые коды. Таблица была разработана и стандартизирована в США, в 1963 году.
Таблица ASCII определяет коды для символов:
- десятичных цифр;
- латинского алфавита;
- национального алфавита[⇨];
- знаков препинания;
- управляющих символов.
ИсторияПравить
Изначально (1963 год) ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; 27=128), а старший бит №7 (нумерация с нуля) использовался для контроля ошибок, возникших при передаче данных. В первой версии кодировались только заглавные буквы. Полосы (группы по 16 символов) № 6 и 7 (нумерация начинается с 0) были зарезервированы для дальнейшего расширения. Велись споры, использовать ли эту область для строчных букв или управляющих символов.
В 1965 году была подготовлена новая редакция ASCII, которая так и не была опубликована. Она не использовалась нигде, кроме терминалов IBM 2260/2848. Следующая спецификация была опубликована в 1967 году, и все содержащиеся в ней символы в дальнейшем не меняли своего положения в таблице.
Со временем кодировка была расширена до 256 символов (28=256); коды первых 128 символов не изменились. ASCII стала восприниматься как половина 8-битной кодировки, а «расширенной ASCII» называли ASCII с задействованным 8-м битом (например, КОИ-8).
Наложение символовПравить
С помощью символа Backspace (BS) (возврат на один символ) на принтере можно печатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам диакритические знаки, например:
a BS '
→ áa BS `
→ àa BS ^
→ âo BS /
→ øc BS ,
→ çn BS ~
→ ñ
Примечание. В старых шрифтах — апостроф «'» рисовался с наклоном влево (сравните: «`» и «´»), а тильда «~» — была сдвинута вверх (сравните: «~» и «˜»), так что они как раз подходили на роль символов акут «´» и «тильда сверху».
Если в одной позиции дважды напечатать один и тот же символ — получится жирный символ; если в одной позиции напечатать символ, а затем подчёркивание «_» — получится подчёркнутый символ:
a BS a
→ aa BS _
→ a
Эта техника до сих пор используется, например, в справочной системе man
.
Национальные варианты ASCIIПравить
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять символы «@», «[», «\», «]», «^», «`», «{», «|», «}», «~». Также на месте знака решётки «#» может быть размещён символ фунта «£», а на месте символа доллара «$» — знак валюты «¤». Вариант ASCII, не содержащий национальных символов, называется «US-ASCII» или «international reference version».
Для некоторых языков (с нелатинской письменностью: русский, греческий, арабский, иврит и др.) существовали более радикальные модификации ASCII:
- В одной из таких модификаций — на месте строчных латинских букв размещались национальные символы (для русского и греческого — заглавные буквы).
- В другой модификации — предусматривалось переключение между US-ASCII и национальным вариантом; переключение осуществлялось «на лету»: с помощью символов «SO» (англ. shift out) и «SI» (англ. shift in); в этом случае — в национальном варианте можно было полностью заменить латинские буквы на национальные символы. См. также: КОИ-7.
Впоследствии оказалось удобнее использовать 8-битовые кодировки (кодовые страницы), в которых нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. Таким образом, верхняя половина таблицы ASCII (до повсеместного внедрения Юникода) активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения кириллических символов в таблице ASCII доставляло множество проблем с кодировками (КОИ-8, Windows-1251 и др.). Носители других языков с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок.
Первые 128 символов стандарта Юникод совпадают с соответствующими символами US-ASCII.
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1. | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2. | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
3. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4. | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5. | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6. | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7. | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
В первой версии стандарта ASCII (1963 год) — в позициях 0x5e (94) и 0x5f (95) располагались символы «стрелка вверх» и «стрелка влево», соответственно. Стандарт ECMA-6 (1965 год) заменил их на знак вставки и символ подчёркивание «_», соответственно.
В Советском Союзе стандарт был утвержден в виде таблицы международной ссылочной версии кода КОИ-7 Н0 ГОСТ 27463-87 (СТ СЭВ 356-86) «Системы обработки информации. 7-битные кодированные наборы символов».[2]
Управляющие символыПравить
Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления телетайпом. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывая специфику устройства. Большинство управляющих символов ASCII вскоре утратили своё назначение и в современных компьютерных системах не используются.
Примечание: далее в списке — коды символов записаны в шестнадцатеричной системе счисления, после названий символов.
- NUL, 00 — null («пустой»). Символ
null
всегда игнорировался. На перфолентах, цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация — не содержали отверстий (то есть содержали символыnull)
; такие участки располагались в начале и в конце ленты. Символnull
по сей день используется во многих языках программирования (как признак конца строки) и обозначается «\0» (термин «строка» обозначает последовательность символов). В некоторых операционных системах,null
— последний символ любого текстового файла.
Сообщения, передаваемые по каналу связи, делились на две части:
- Заголовок;
- Текст.
«Заголовок» содержал: адреса отправителя и получателя, контрольную сумму и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.
Символ | Код HEX | Расшифровка | Перевод | Описание |
---|---|---|---|---|
SOH | 01 | start of heading | начало «заголовка» | Символ начала заголовка (SOH) отмечает разделение данных, не относящийся к данным: часть потока, содержащую адреса и другие служебные данные. |
STX | 02 | start of text | начало «текста» | Включить печатающее устройство (телетайп). Текст для печати располагался между символами «STX » и «ETX ».
|
ETX | 03 | end of text | конец «текста» | Выключить печатающее устройство (телетайп). В наши дни код «03 » используется для отправки процессу сигнала «SIGINT» (сигнал-прерывание: англ. signal interrupt) и может быть набран нажатием комбинации клавиш Ctrl+C. Получив такой сигнал, процесс должен завершить работу[en].
|
EOT | 04 | end of transmission | конец передачи | Символ используется эмуляторами терминалов в значении «Конец файла» (EOF: англ. end of file) и может быть отправлен нажатием комбинации клавиш Ctrl+D. Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в стандартном потоке ввода этого процесса (stdin: англ. standard input stream) флаг «Конец файла». В результате процесс прекратит чтение[en] stdin и начнёт обработку прочитанных данных. |
ENQ | 05 | enquire | «Прошу подтверждения!» | |
ACK | 06 | acknowledgement | «Подтверждаю!» | Символ «NAK » означает обратное: «Не подтверждаю!».
|
BEL | 07 | bell | звуковой сигнал: звонок | Символ часто обозначается как «\a» и используется для подачи звукового сигнала. В современном персональном компьютере звук воспроизведёт встроенный динамик. Например, следующие команды могут воспроизвести такой звук:
|
BS | 08 | backspace | возврат на один символ | Клавиша ← Backspace служит для стирания предыдущего символа. |
TAB | 09 | tabulation | горизонтальная табуляция | Обозначается как «\t». Иногда называется «HT » (от англ. horizontal tabulation).
|
LF | 0A | line feed | перевод строки | Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки текстового файла различается в семействах операционных систем:
Во многих языках программирования символ обозначается как «\n». Нажатие на клавишу ↵ Enter при выводе текста переводит строку. |
VT | 0B | vertical tab | вертикальная табуляция | |
FF | 0C | form feed | «прогон страницы», новая страница | Команда для принтера: продолжить печать с начала следующего листа. |
CR | 0D | carriage return | возврат каретки | Команда для принтера: продолжить печать с начала текущей строки (не с новой строки). Во многих языках программирования — символ «CR » обозначается как «\r». В операционной системе «Mac» — символ «CR » (в прошлом) обозначал конец строки текстового файла. С клавиатуры символ «CR »может быть введён нажатием комбинации клавиш: Ctrl+M.
|
SO | 0E | shift out | «Переключиться на другую ленту (кодировку)» | Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку. |
SI | 0F | shift in | «Переключиться на исходную ленту (кодировку)» | Команда для выполнения действия, обратного действию «SO ».
|
DLE | 10 | data link escape | «Экранирование канала данных» | Любые символы, следующие после «DLE », должны восприниматься как данные, а не как управляющие символы.
|
DC1 | 11 | device control 1 | Первый символ управления устройством | Команда включить устройство чтения перфоленты. |
DC2 | 12 | device control 2 | Второй символ управления устройством | Команда включить перфоратор. |
DC3 | 13 | device control 3 | Третий символ управления устройством | Команда выключить устройство чтения перфоленты. |
DC4 | 14 | device control 4 | Четвёртый символ управления устройством | Команда выключить перфоратор. |
NAK | 15 | negative acknowledgment | «Не подтверждаю!» | Обратно символу «ACK ».
|
SYN | 16 | synchronization | Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать. | |
ETB | 17 | end of text block | конец текстового блока | Иногда текст (по техническим причинам) разбивался на блоки. |
CAN | 18 | cancel | «Отмена» | Отмена того, что было передано ранее. |
EM | 19 | end of medium | «Конец носителя» | Кончилась перфолента, бумага — и т. п. |
SUB | 1A | substitute | «Подставить» | Символ ставится:
В настоящее время символ вставляется нажатием комбинации клавиш Ctrl+Z и используется для обозначения конца файла в операционных системах «DOS» и «Windows». |
ESC | 1B | escape | Знак того, что символ, следующий после «ESC », имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа «ESC » следуют управляющие последовательности; в операционной системе «DOS» они реализуются драйвером «ANSI.SYS».
| |
DEL | 7F | delete | стереть последний символ | Символом «DEL » (состоящим в двоичном коде из всех единиц) можно было «забить» любой символ. Устройства и программы игнорировали «DEL » так же, как и «NUL ».
Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило «забиванием» его кода дырочками (обозначавшими логические единицы). |
Поддерживалось разделение данных на 4 уровня:
Символ | Код | Расшифровка | Перевод | Описание |
---|---|---|---|---|
FS | 1C | file separator | разделитель файлов | сообщение могло состоять из файлов |
GS | 1D | group separator | разделитель групп | файлы могли состоять из групп |
RS | 1E | record separator | разделитель записей | группы могли состоять из записей |
US | 1F | unit separator | разделитель юнитов | записи могли состоять из юнитов |
Структурные свойства таблицыПравить
- Коды символов цифр «0»-«9» в двоичной системе счисления начинаются с 00112, а заканчиваются двоичными значениями чисел. Например, 01012 — число 5, а 0011 01012 — символ «5». Зная об этом, можно преобразовать двоично-десятичные числа (BCD) в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
- Буквы «A»-«Z» верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на принадлежность кода к диапазону значений. Буквы представляются своими порядковыми номерами в алфавите, записанными пятью цифрами в двоичной системе счисления, перед которыми стоит 0102 (для букв верхнего регистра) или 0112 (для букв нижнего регистра).
- Положение заглавных латинских букв и цифр было выбрано из соображений совместимости с шестибитной кодировкой DEC SIXBIT[3]:228, 237 § 14, появившейся годом ранее.
- Расположение части небуквенных знаков было обусловлено положением их на клавиатурах тех времён (например, Teletype Model 33), куда они перекочевали с механических пишущих машин, в частности "#$%_&'(). Однако на электромеханических пишущих машинах, в частности IBM Selectric расположение этих знаков было иным, что связано с наличием у некоторых из них механизма дозирования силы удара, а значит требовало расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от таблицы ASCII положение этих знаков было закреплено в IBM PC.
Представление ASCII в ЭВМПравить
На подавляющем большинстве современных компьютеров, минимально адресуемая единица памяти — байт (размером в 8 бит); поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.
На компьютерах IBM/360 однако (в случае использования ASCII) применялся другой метод: 6-й бит (если первым считать самый младший бит) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й. Получается такая таблица[4]:
.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 используются в программировании как промежуточные кроссплатформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам). Для раскладки клавиатуры QWERTY — таблица кодов выглядит так, как показано в следующей таблице[5].
27 112 113 114 115 116 117 118 119 120 121 122 123 44 145 19 192 49 50 51 52 53 54 55 56 57 48 189 187 8 45 36 33 144 111 106 109 9 81 87 69 82 84 89 85 73 79 80 219 221 13 46 35 34 103 104 105 107 20 65 83 68 70 71 72 74 75 76 186 222 220 100 101 102 16 226 90 88 67 86 66 78 77 188 190 191 16 38 97 98 99 13 17 91 18 32 18 92 93 17 37 40 39 96 110 |
См. такжеПравить
ПримечанияПравить
- ↑ ASCII (англ.). the Cambridge English Dictionary. dictionary.cambridge.org. Дата обращения: 9 апреля 2018. Архивировано 27 сентября 2017 года.
- ↑ ГОСТ 27463-87 (СТ СЭВ 356-86) Системы обработки информации. 7-битные кодированные наборы символов (с Изменением N 1), ГОСТ от 29 октября 1987 года №27463-87 (неопр.). docs.cntd.ru. Дата обращения: 9 апреля 2018. Архивировано 23 апреля 2018 года.
- ↑ Coded Character Sets, History and Development (англ.). — 1. — Addison-Wesley Publishing Company, Inc., 1980. — P. 6, 66, 211, 215, 217, 220, 223, 228, 236—238, 243—245, 247—253, 423, 425—428, 435—439. — ISBN 978-0-201-14460-4.
- ↑ Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964
- ↑ Keys Enum (неопр.). Microsoft.com. Дата обращения: 11 июня 2022. Архивировано 11 июня 2022 года.
СсылкиПравить
- Цветная таблица ASCII
- Standard ECMA-6: 7-bit coded character set. 6th edition (англ.). Ecma international (декабрь 1991). Архивировано 23 августа 2011 года.
- Tom Jennings. An annotated history of some character codes or ASCII. American standard code for information infiltration (англ.) (29 октября 2004). Архивировано 23 августа 2011 года.
- ASCII chart and other resources (англ.). JimPrice.Com.