ASCII
Материал из Википедии — свободной энциклопедии
ASCII (англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией; по-американски произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски], по-русски произносится [а́ски], и слово ASCII чаще употребляется в женском роде) — 7-битная компьютерная кодировка для представления латинского алфавита, десятичных цифр, некоторых знаков препинания, арифметических операций и управляющих символов. В честь кода ASCII даже был назван небольшой астероид — «3568 ASCII» (открыт в 1936 году, название получил позже).
Содержание |
[править] История ASCII
Первый вариант ASCII предназначался в основном для передачи сообщений по телетайпу. Он был разработан 1963 году в фирме Bell Laboratories на смену созданному в 1874 году 5-битному коду Бодо (предшественницей кода Бодо была азбука Морзе). В этом варианте ещё не было строчных букв. Они были добавлены в 1967 году, наряду с заменой стрелочки влево на подчерк (_), а стрелочки вверх — на символ ^. Так возник вариант ASCII, используемый и поныне.
По сравнению с кодом Бодо, кодировка ASCII представляла широкий набор обычных и управляющих символов, кроме того, буквы шли подряд и по алфавиту, что позволяло легко сортировать тексты.
7-битный код оказался удобным для использования и в компьютерах, поскольку компьютеры оперировали 8-битными байтами, а 8-й бит можно было использовать для контроля чётности. Системы, не использовавшие контроль чётности, обычно делали старший бит нулевым. 7-битность позволяла также добавить лишние 128 символов, например, для поддержки национальных алфавитов.
Конкурентом ASCII была кодировка EBCDIC, разработанная в 1964 году фирмой IBM для своей операционной системы System/360. Кодировка EBCDIC была сделана под тогдашние перфораторы и обладала рядом недостатков: была 8-битной (следовательно, не позволяла ни осуществлять контроль чётности, ни добавлять новые символы); буквы шли хоть и по алфавиту, но не подряд (например, после I следует не J, а символ переноса (soft hyphen)). В результате почти везде использовалась ASCII, а EBCDIC — только в системе System/360 и совместимых с ней (например, ОС ЕС). Сейчас даже мейнфреймы IBM используют EBCDIC только для обратной совместимости.
[править] Национальные варианты ASCII
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант ASCII без национальных символов называется US-ASCII, или «International Reference Version».
Для языков с нелатинской письменностью (русского, греческого, арабского, иврита) существовали более радикальные модификации ASCII. Одним из вариантов был отказ от строчных латинских букв — на их месте размещались национальные символы (для русского и греческого — только заглавные буквы). Другой вариант — переключение между US-ASCII и национальным вариантом «на лету» с помощью символов SO (Shift Out) и SI (Shift In) — в этом случае в национальном варианте можно полностью устранить латинские буквы и занять всё пространство под свои символы. См. также КОИ-7.
Впоследствии оказалось удобнее использовать 8-битные кодировки, где нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — разные другие нужные символы. В Юникоде первые 128 символов тоже совпадают с соответствующими символами US-ASCII. В настоящее время национальные 7-битные кодировки уже прочно забыты, и «ASCII» практически всегда означает «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. | 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 |
[править] Управляющие символы
После названия каждого символа указан его шестнадцатеричный код.
- 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, звонок. Сейчас тоже используется.
- 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. Следующие символы — что-то специальное.
- FS, 1C — File Separator, разделитель файлов.
- GS, 1D — Group Separator, разделитель групп.
- RS, 1E — Record Separator, разделитель записей.
- US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.
- DEL, 7F — Delete, стереть (последний символ). На перфолентах 1 представлялась дырочкой, 0 — отсутствием дырочки. Поэтому символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL
[править] Структурные свойства таблицы
- Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.
- Буквы верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон.
[править] Представление ASCII в компьютерах
На подавляющем большинстве современных компьютеров минимально адресуемая единица памяти — 8-битный байт, поэтому там используются 8-битные, а не 7-битные символы. Обычно символ ASCII расширяют до 8 бит, просто добавляя 1 нулевой бит в качестве старшего.
На компьютерах системы IBM/360, однако, в случае использования ASCII применялся другой метод: 6-й бит (если считать самый младший бит первым) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й. Получается такая таблица:
.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 |
(таблица символов приведена по книге G. M. Amdahl, G. A. Blaauw, F. P. Brooks, Jr. "Architecture of the IBM System/360", 1964)
На тех компьютерах, где минимально адресуемой единицей памяти было 36-битное слово, поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа.
[править] См. также
- Переносимый набор символов
- Управляющие символы
- EBCDIC
- ISCII
- VISCII
- Юникод
- ASCII art
[править] Ссылки
- Цветная таблица ASCII
- Стандарт ECMA-6: 7-битная кодировка набора символов, Шестая редакция (декабрь 1991)
- История кодов символов
- Описание и ресурсы ASCII