ASCII — самая известная Кодировка.
ASCII — эта кодировка может считаться основной компьютерной кодировкой, ибо лежит в основе всех прочих кодировок. Начало перегружено управляющими символами.
При формировании ASCII в начало кодировки были включены управляющие символы, присущие телетайпам и пишущим машинкам, а со временем они там намертво присохли, хотя в 21-м веке практически не используются.
Привожу подробную информацию о кодировке ASCII:
ASCII (англ. American standard code for information interchange, [ˈæs.ki] ) — название таблицы (кодировки, набора), в которой некоторым распространённым печатным и непечатным символам сопоставлены числовые коды. Таблица была разработана и стандартизована в США в 1963 году. Название «ASCII» по-русски часто произносится как [аск(и)и́].
Таблица ASCII определяет коды для символов:
- десятичных цифр;
- латинского алфавита;
- национального алфавита;
- знаков препинания;
- управляющих символов.
История
Изначально (1963 год) ASCII была разработана для кодирования символов, коды которых помещались в 7 бит (128 символов; 27=128), при этом старший 7-й бит (нумерация с нуля) использовался для контроля ошибок, возникших при передаче данных.
Со временем кодировка была расширена до 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 → a
- a 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.
Таблица 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 год) заменил их на знак вставки (который также используется в роли символа циркумфлекс «^» ) и символ подчёркивание «_» соответственно.
Управляющие символы
Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления устройством телетайп. Аналогичные команды применялись и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), учитывали специфику устройства.
Примечание: далее в списке коды символов записаны в шестнадцатеричной системе счисления после названий символов.
- NUL, 00 — null, пустой. Символ null всегда игнорировался. На перфолентах цифра «1» обозначалась отверстием, а цифра «0» — отсутствием отверстия. Участки перфоленты, на которых не была записана информация, не содержали отверстий, то есть содержали символы null; такие участки располагались в начале и в конце ленты. Символ null по сей день используется во многих языках программирования, как признак конца строки, и обозначается «\0». (Термин «строка» обозначает последовательность символов.) В некоторых операционных системах null — последний символ любого текстового файла.
Сообщения, передаваемые по каналу связи, делились на две части:
- «заголовок»;
- «текст».
«Заголовок» содержал адреса отправителя и получателя, контрольную сумму и т. п., мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.
- SOH, 01 — start of heading, начало «заголовка».
- STX, 02 — start of text, начало «текста». Символ использовался как команда для включения печатающего устройства телетайпа. Текст для печати располагался между символами STX и ETX.
- ETX, 03 — end of text, конец «текста». Символ использовался для выключения печатающего устройства телетайпа. В наши дни код 03 используется для отправки процессу сигнала SIGINT (англ. signal interrupt) и может быть послан нажатием комбинации клавиш Ctrl+C. Получив такой сигнал, процесс должен завершить работу.
- EOT, 04 — end of transmission, конец передачи. Символ используется эмуляторами терминалов в значении «конец файла» (EOF, англ. end of file) и может быть послан нажатием комбинации клавиш Ctrl+D. Получив такой символ, эмулятор терминала определит процесс, в данный момент работающий с терминалом, и установит флаг «конец файла» (EOF) для стандартного потока ввода (stdin, англ. standard input stream) этого процесса. В результате процесс прекратит чтение stdin и приступит к обработке прочитанных данных.
- ENQ, 05 — enquire. «Прошу подтверждения».
- ACK, 06 — acknowledgement. «Подтверждаю». Символ NAK означает обратное — «не подтверждаю».
- BEL, 07 — bell, звонок, звуковой сигнал. Символ часто обозначается как «\a» и используется для подачи звукового сигнала. В современном ПК звук воспроизводит встроенный динамик. Например, следующие команды могут воспроизвести звук: echo -e «\a» или echo -e «\007″ (bash); echo ^G (cmd.exe; для ввода ^G нажмите Ctrl+G), printf( «\a» ); (код на языке программирования C).
- BS, 08 — backspace, возврат на один символ. Клавиша ← Backspace служит для стирания предыдущего символа.
- TAB, 09 — tab, горизонтальная табуляция. Обозначается как «\t». Иногда называется HT от англ. horizontal tabulation.
- LF, 0A — line feed, перевод строки. Команда для опускания каретки печатающего устройства на одну строку вниз. Символ используется для обозначения конца строки текстового файла в ОСUNIX. Последовательность символов CR LF обозначает конец строки текстового файла в ОС Windows. Символ во многих языках программирования обозначается как «\n». Нажатие на клавишу ↵ Enter при выводе текста приводит к переводу строки.
- VT, 0B — vertical tab, вертикальная табуляция.
- FF, 0C — form feed, прогон страницы, новая страница. Команда для принтера: продолжить печать с начала следующего листа.
- CR, 0D — carriage return, возврат каретки. Команда для принтера: продолжить печать с начала текущей строки (не с новой строки). Во многих языках программирования символ CR обозначается как «\r». В ОС Mac OS символ CR обозначает конец строки текстового файла. С клавиатуры символ CR может быть введёт нажатием комбинации клавиш Ctrl+M.
- SO, 0E — shift out, переключиться на другую ленту. Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку.
- SI, 0F — shift in. Команда для выполнения действия, обратного действию SO: переключиться на исходную ленту или переключиться на исходную кодировку.
- DLE, 10 — data link escape, освобождение канала данных. Любые символы, следующие после DLE, должны восприниматься как данные, а не как управляющие символы.
- 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, не подтверждаю. Обратно символу 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
Поддерживалось разделение данных на 4 уровня:
- сообщение могло состоять из файлов;
- файлы могли состоять из групп;
- группы могли состоять из записей;
- записи могли состоять из юнитов.
- FS, 1C — file separator, разделитель файлов.
- GS, 1D — group separator, разделитель групп.
- RS, 1E — record separator, разделитель записей.
- US, 1F — unit separator, разделитель юнитов.
- DEL, 7F — delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было «забить» любой символ. Устройства и программы игнорировали DEL так же, как и NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило «забиванием» его кода дырочками (обозначавшими логические единицы).
Структурные свойства таблицы
- Коды символов цифр «0»—«9» в двоичной системе счисления начинаются с 00112, а заканчиваются двоичными значениями чисел. Например, 01012 — число 5, а 0011 01012 — символ «5». Зная об этом, можно преобразовать двоично-десятичные числа (BCD) в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
- Буквы «A»—«Z» верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на принадлежность кода к диапазону значений. Буквы представляются своими порядковыми номерами в алфавите, записанными пятью цифрами в двоичной системе счисления, перед которыми стоит 0102 (для букв верхнего регистра) или 0112 (для букв нижнего регистра).
Представление ASCII в ЭВМ
На подавляющем большинстве современных компьютеров минимально адресуемая единица памяти — байт размером в 8 бит. Поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.
Коды ASCII используются в программировании как промежуточные кросс-платформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам).
Для раскладки клавиатуры QWERTY таблица кодов выглядит так, как показано в следующей таблице:
Escape 27
F1 112
F2 113
F3 114
F4 115
F5 116
F6 117
F7 118
F8 119
F9 120
F10 121
F11 122
F12 123
Print Screen Scroll Lock 145
Pause 19
`ё 192
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
0 48
- 189
=+ 187
Back Space 8
Insert 45
Home 36
Page Up 33
Num Lock 144
/ доп. 111
* доп. 106
+ доп. 107
Tab 9
Q 81
W 87
E 69
R 82
T 84
Y 89
U 85
I 73
O 79
P 80
[ 219
] 221
Delete 46
End 35
Page Down 34
7 доп. 103
8 доп. 104
9 доп. 105
Caps Lock 20
A 65
S 83
D 68
F 70
G 71
H 72
J 74
K 75
L 76
;ж 186
‘э 222
Enter 13
4 доп. 100
5 доп. 101
6 доп. 102
Enter доп.
13
Shift 16
Z 90
X 88
C 67
V 86
B 66
N 78
M 77
,< 188
.> 190
/ 191
Shift 16
\| 220
Up 38
1 доп. 97
2 доп. 98
3 доп. 99
Ctrl 17
win
Alt 18
Space Bar 32
Alt 18
win list Ctrl 17
Left 37
Down 40
Right 39
Ins/0 45/96
Del/. 46/110
На этой раскладке клавиатуры отсутствуют русские буквы, а также есть кое-какие неточности, но основные особенности отражены.
Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!
И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Продолжение тут…