ASCII

У этого термина существуют и другие значения, см. ASCII (значения).

Запрос «ISO 646»[d] перенаправляется сюда. На эту тему нужно создать отдельную статью.

ASCII

Орган стандартизации |  Национальный институт стандартов США
Медиафайлы на Викискладе

ASCII (англ. American Standard Code for Information Interchange, [ˈæs.ki][1]) — стандарт кодирования букв латинского алфавита, цифр, некоторых специальных знаков и управляющих символов, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных в ЭВМ[2].

Во избежание путаницы с используемыми в других странах национальными кодами, основанными на ASCII, IANA рекомендует обозначать оригинальный код как US-ASCII[3].

## Содержание

* 1 Описание
* 2 История
* 3 Структурные свойства таблицы
* 3.1 Управляющие символы
* 4 Наложение символов
* 5 Представление ASCII в ЭВМ
* 5.1 USASCII-8
* 6 Ввод с клавиатуры
* 7 Национальные варианты и расширения
* 7.1 7-битные варианты
* 7.2 8-битные расширения
* 7.3 ISO/IEC 10646 и Юникод
* 8 См. также
* 9 Примечания
* 9.1 Комментарии
* 9.2 Источники
* 10 Литература
* 11 Ссылки

## Описание

[править | править код]

Кодовая таблица ASCII

Стандарт ASCII представляет собой 7-битный код без рекомендаций относительно контроля чётности, содержащий 27 = 128 кодовых позиций[4], в которых размещены следующие символы:

* десятичные цифры;
* латинские буквы;
* знаки препинания;
* орфографические знаки;
* диакритические знаки;
* математические символы;
* управляющие символы.

## История

[править | править код]

С развитием вычислительной техники и языков программирования возможностей телетайпного кода ITA2 стало не хватать, что вынуждало производителей ЭВМ создавать расширения для ITA2 или же свои собственные коды. Кроме того, для записи на перфокарты использовались различные варианты кода Холлерита?!. Таким образом, к началу 1960-х годов существовало достаточно большое количество кодировок латиницы, используемых как для передачи по линиям связи, так и для записи на носители — магнитную ленту, перфоленту и перфокарты, — таких как ITA2, Fieldata[англ.], различные варианты BCDIC и т. д.[5], причём даже в рамках одной и той же кодировки один код мог соответствовать различным символам в зависимости от модели и назначения устройства. Чтобы решить эту проблему, 4 августа 1960 года был создан комитет X3.2 (как часть комитета X3, сформированного 13 января того же года)[6], в который вошли представители компаний IBM (в частности, Роберт Бемер[англ.]), AT&T, Bell Labs и других.

Работа по созданию ASCII началась 6 октября 1960 года[6], и 17 июня 1963 года, почти 3 года спустя, была опубликована его первая редакция (ASA X3.4—1963)[7]. В ней отсутствовали строчные буквы, а область из 28 кодовых позиций `0x60`—`0x7B` была зарезервирована для дальнейшего использования[8][9]. Велись споры о том, как использовать эту область — для добавления строчных букв или же управляющих символов.

В 1965 году была подготовлена новая редакция ASCII (ASA X3.4—1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов)[10]. Следующая редакция ASCII (USAS X3.4—1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу[11]. Новые редакции ASCII продолжили выходить и далее (USAS X3.4—1968, ANSI X3.4—1977, ANSI X3.4—1986 и т. д.), однако кодовую таблицу изменения в них более не затрагивали.

В целом, внедрение ASCII долгое время саботировалось компанией IBM, отдававшей предпочтение собственной кодировке EBCDIC, являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита[7].

## Структурные свойства таблицы

[править | править код]

Первая редакция ASCII содержала 36 управляющих символов, пробел, 10 арабских цифр, 26 заглавных латинских букв и 27 специальных символов, подразделяемых на группы[12]:

* 8 знаков препинания (`.`, `,`, `:`, `;`, `!`, `?`, `'`, `"`);
* 5 знаков для финансовых и биржевых операций (`#`, `$`, `%`, `&`, `@`);
* 2 пары скобок (`(`, `)`, `[`, `]`);
* 8 математических символов (`+`, `-`, `*`, `/`, `\`, `=`, `<`, `>`)[a];
* 2 стрелки для блок-схем (`↑`, `←`).

Символ «подушка» (`⌑`), имевшийся в наборе доступных символов многих печатающих устройств того времени и присутствовавший в кодировках BCDIC, Fieldata и др., ни в одну из редакций ASCII не вошёл.

В редакции 1967 года был пересмотрен (сокращён до 33) набор управляющих символов и убраны стрелки, а также добавлены строчные буквы и 7 дополнительных символов (`^`, `_`, ```, `{`, `|`, `}`, `~`), после чего кодовая таблица приняла окончательный вид[13]:

Кодовая таблица ASCII (начиная с редакции USAS X3.4—1967) | .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\.  | SP | !  | "  | #  | $  | %  | & | '  | (  | )  | *  | \+  | ,  | \-  | .  | /
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 делятся на 4 группы по 32 символа[14]:

1. Управляющие символы предназначены для управления передачей и выводом текста на терминал[15]. Группа начинается с символа NUL (`0x00`), означающего незаписанный участок носителя, например перфоленты, и игнорируемого при выводе на экран или на печать[16]. За пределами группы, в конце таблицы также располагается символ DEL (`0x7F`), означающий пробитый целиком участок перфоленты и сигнализирующий о том, что символ, записанный здесь ранее, был удалён, а значит, его также следует пропустить[16][17].
* Сами управляющие символы основной группы изначально были разделены на 4 подгруппы: управление передачей (`0x01`—`0x07`), форматирование (`0x08`—`0x0F`), управление устройством (`0x10`—`0x17`) и разделители потоков данных (`0x18`—`0x1F`)[18]. В редакции 1967 года этот порядок был отчасти нарушен из-за переноса дополнительных управляющих символов.
2. Группа цифр и основных знаков препинания делится на две подгруппы по 16 символов, соответствующие верхнему и нижнему регистру.
* Группа начинается с пробела (`0x20`) — было принято решение, что пробел должен считаться печатным, а не управляющим символом, но при этом располагаться в самом начале для корректной работы алгоритмов сортировки[19].
* 9 символов после пробела — знаки препинания (`!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`), идущие в том порядке, в котором их располагали на клавиатурах пишущих машин тех лет[12], за исключением скобок, которые заняли позиции `0x28` и `0x29`, поскольку цифра 0 оказалась под кодовой позицией пробела[20]. Впрочем, на некоторых электромеханических пишущих машинах, в частности IBM Selectric, расположение этих знаков было иным в связи с наличием у них механизма дозирования силы удара, который требовал расположения на одной клавише знаков, близких по оптической плотности. Окончательно отличное от кодовой таблицы ASCII расположение этих знаков на клавиатуре было закреплено в IBM PC.
* Цифры идут во второй подгруппе — такое решение было принято для простоты преобразования ASCII в 4-битный двоично-десятичный код (BCD) и обратно, соответственно, путём отброса или добавления старших трёх битов кода цифры (0112): так, например, цифре 5 соответствует код `0x35` (01101012) в ASCII и 01012 в BCD. По этой причине цифры невозможно было разместить в первой подгруппе, поскольку в ней первым идёт пробел[17][21]. Другая причина расположения цифр в этой подгруппе — необходимость того, чтобы при сортировке большинство знаков препинания располагалось раньше цифр и букв[22].
* Символы точки и запятой в пишущих машинах тех лет дублировались в обоих регистрах. При создании ASCII было решено не дублировать их, а разместить в спаренных позициях символы `<` и `>`[23]. Знак вопроса также спарен со знаком косой черты как на пишущих машинах[12].
3. Группа заглавных букв начинается с символа «коммерческое „эт“» (@, `0x40`) — предполагалось, что для машин, поставляемых во Францию и Италию, этот символ будет заменяться на букву `À`. Положение заглавных латинских букв и цифр было выбрано из соображений совместимости с шестибитной кодировкой DEC SIXBIT. Три позиции после заглавных букв (`0x5B`, `0x5C` и `0x5D`) также предполагалось при необходимости заменять на национальные символы. В редакции 1963 года в позициях `0x5E` и `0x5F` располагались, соответственно, символы «стрелка вверх» (↑) и «стрелка влево» (←), заменённые в редакции 1965 года на циркумфлекс (^) и подчёркивание (_).
4. Группа строчных букв появилась в редакции 1965 года и была частично пересмотрена в редакции 1967 года. Все строчные буквы расположены так же, как и соответствующие заглавные, что позволяет переключать регистр инвертированием 6-го бита (если первым считать самый младший бит). Позиции `0x60`, `0x7B`, `0x7C` и `0x7D` также предполагалось при необходимости заменять на национальные символы. Символ логического отрицания (¬, `0x7C`), добавленный в редакции 1965 года, в редакции 1967 года был убран.

Важная особенность ASCII — он, в отличие, к примеру, от ITA2, не использует переключение регистров[22]. Хотя переключение регистров могло бы уменьшить число битов, требуемое для кодирования сообщения, и, следовательно, уменьшить время передачи и занимаемое место на носителях, оно также повысило бы вероятность не прочесть сообщение при его повреждении[24]. Таким образом, было решено отказаться от использования регистров и кодировать все символы 7-ю битами[22]. Тем не менее, для возможности дальнейшего расширения ASCII в набор включены символы ESC, SI и SO[24].

### Управляющие символы

[править | править код]

Основная статья: Управляющие символы

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

Сообщения, передаваемые по каналу связи, делились на две части:

* заголовок;
* текст.

«Заголовок» мог содержать адреса отправителя и получателя, контрольную сумму и т. п.; мог размещаться до «текста» или после. Термином «текст» называлась часть сообщения, предназначенная для печати.

Символ  | Код  | Расшифровка  | Перевод  | Описание

|
|
|
|

NUL | `0x00` | null  | пусто  | Символ `NUL` всегда игнорировался. Носителем информации для телетайпов и первых компьютеров была перфолента, на которой единичный бит представлялся наличием кодового отверстия, а нулевой бит — его отсутствием. Участки перфоленты, на которых не была записана информация, не имели кодовых отверстий (то есть содержали символы `NUL`). Символ `NUL` по сей день используется в некоторых языках программирования (например, Си) как признак конца строки (термин «строка» обозначает последовательность символов). В некоторых операционных системах `NUL` — последний символ любого текстового файла.

Во многих языках программирования обозначается как `\0`.

SOH | `0x01` | start of heading  | начало «заголовка»  | Символ `SOH` отмечает данные, не относящиеся к «тексту»: часть потока, содержащую адреса и другие служебные данные (собственно «заголовок»).
STX | `0x02` | start of text  | начало «текста»  | Включить печатающее устройство (телетайп). Текст для печати располагался между символами `STX` и `ETX`.
ETX | `0x03` | end of text  | конец «текста»  | Выключить печатающее устройство (телетайп). В наши дни символ `ETX` используется для отправки процессу сигнала SIGINT (от англ. signal interrupt — «сигнал-прерывание») и может быть набран нажатием комбинации клавиш `Ctrl`+`C`. Получив такой сигнал, процесс должен завершить работу[англ.].
EOT | `0x04` | end of transmission  | конец передачи  | Символ используется эмуляторами терминалов в значении EOF (от англ. end of file — «конец файла») и может быть отправлен нажатием комбинации клавиш `Ctrl`+`D`. Получив такой сигнал, эмулятор терминала определит процесс, который в данный момент работает с терминалом, и установит в потоке stdin (от англ. standard input stream — «стандартный поток ввода») этого процесса признак «конец файла». В результате процесс прекратит чтение[англ.] stdin и начнёт обработку прочитанных данных.
ENQ | `0x05` | enquiry  | «Прошу подтверждения!»  |
ACK | `0x06` | acknowledgement  | «Подтверждаю!»  | Символ `NAK` означает обратное: «Не подтверждаю!».
BEL | `0x07` | bell  | звуковой сигнал: звонок  | Используется для подачи звукового сигнала.

Во многих языках программирования обозначается как `\a` (от англ. alert).

BS | `0x08` | backspace  | возврат на один символ  | Передаётся при нажатии клавиши `← Backspace`.

Во многих языках программирования обозначается как `\b`.

HT | `0x09` | horizontal tab  | горизонтальная табуляция | Во многих языках программирования обозначается как `\t`.
LF | `0x0A` | line feed  | перевод строки | Команда для опускания каретки печатающего устройства на одну строку вниз. Обозначение конца строки различается в семействах операционных систем:

* в UNIX — одиночный символ `LF`;
* в классических версиях Mac OS и некоторых ОС домашних компьютеров — одиночный символ `CR`;
* в Windows — последовательность символов `CR` `LF`.

Многие терминалы 1970—1980-х годов содержали переключатель поведения клавиши `↵ Return`, позволяющий посылать при нажатии на неё либо последовательность `CR` `LF`, либо только `CR`.

Во многих языках программирования обозначается как `\n`.

VT | `0x0B` | vertical tab  | вертикальная табуляция | Во многих языках программирования обозначается как `\v`.
FF | `0x0C` | form feed  | «прогон страницы», новая страница  | Команда для принтера: продолжить печать с начала следующего листа.

Во многих языках программирования обозначается как `\f`.

CR | `0x0D` | carriage return  | возврат каретки | Команда для принтера: продолжить печать с начала текущей строки (не с новой строки). В классических версиях операционной системы Mac OS символ `CR` обозначал конец строки текстового файла. С клавиатуры символ `CR` может быть введён нажатием комбинации клавиш: `Ctrl`+`M`.

Во многих языках программирования обозначается как `\r`.

SO | `0x0E` | shift out  | «Переключиться на другую ленту (кодировку)»  | Другая лента обычно была окрашена в красный цвет. В дальнейшем символ использовался для переключения на национальную кодировку.
SI | `0x0F` | shift in  | «Переключиться на исходную ленту (кодировку)»  | Команда для выполнения действия, обратного действию `SO`.
DLE | `0x10` | data link escape  | «Экранирование канала данных»  | Любые символы, следующие после `DLE`, должны восприниматься как данные, а не как управляющие символы.
DC1 | `0x11` | device control 1 | Первый символ управления устройством  | Команда включить устройство чтения перфоленты.
DC2 | `0x12` | device control 2 | Второй символ управления устройством  | Команда включить перфоратор.
DC3 | `0x13` | device control 3 | Третий символ управления устройством  | Команда выключить устройство чтения перфоленты.
DC4 | `0x14` | device control 4 | Четвёртый символ управления устройством  | Команда выключить перфоратор.
NAK | `0x15` | negative acknowledgement  | «Не подтверждаю!»  | Обратно символу `ACK`.
SYN | `0x16` | synchronous idle  | синхронное ожидание  | Символ `DLE` использовался (передавался) для сохранения синхронизма передатчика и приёмника в системах синхронной связи, когда фактически передавать было нечего.
ETB | `0x17` | end of transmission block  | конец блока передаваемых данных  | Иногда данные (по техническим причинам) разбивались на блоки.
CAN | `0x18` | cancel  | «Отмена»  | Отмена того, что было передано ранее.
EM | `0x19` | end of medium  | «Конец носителя»  | Кончилась бумага, перфолента, магнитная лента и т. п.
SUB | `0x1A` | substitute  | «Подставить»  | Символ ставится:

* на месте символа, значение которого было потеряно (или испорчено) при передаче;
* перед символом, для интерпретации которого нужно переключиться на дополнительный набор символов;
* перед символом, печатать который нужно другим цветом;
* и т. п.

В настоящее время символ вставляется нажатием комбинации клавиш `Ctrl`+`Z` и используется для обозначения конца файла в операционных системах DOS и Windows.

ESC | `0x1B` | escape  | экранирование  | Признак того, что символ, следующий после `ESC`, имеет какое-то другое (отличное от определённого в ASCII) значение. Обычно после символа `ESC` следуют управляющие последовательности; в операционной системе DOS они реализуются драйвером ANSI.SYS.
DEL | `0x7F` | delete  | «Забой», стереть последний символ  | Символом `DEL` (состоящим из семи единичных битов) можно было «забить» любой символ. Устройства и программы игнорировали `DEL` так же, как и `NUL`.

Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило «забиванием» его кода отверстиями (обозначавшими логические единицы).

Поддерживалось разделение данных на 4 уровня:

Символ  | Код  | Расшифровка  | Перевод  | Описание

|
|
|
|

FS | `0x1C` | file separator  | разделитель файлов  | сообщение могло состоять из файлов
GS | `0x1D` | group separator  | разделитель групп  | файлы могли состоять из групп
RS | `0x1E` | record separator  | разделитель записей  | группы могли состоять из записей
US | `0x1F` | unit separator  | разделитель полей  | записи могли состоять из полей

## Наложение символов

[править | править код]

С помощью символа BS (возврат на один символ) на печатающем устройстве (например, АЦПУ телетайпа или матричном принтере) можно напечатать один символ поверх другого. В ASCII таким же способом можно добавить к буквам диакритические знаки[25], например:

* `a` `BS` `'` → á
* `a` `BS` ``` → à
* `a` `BS` `^` → â
* `a` `BS` `"` → ä
* `o` `BS` `/` → ø
* `c` `BS` `,` → ç
* `n` `BS` `~` → ñ

Разработчикам шрифтов рекомендовалось учитывать возможность использования двойной кавычки ("), апострофа ('), запятой (,) и тильды (~) в качестве диакритических знаков, а грависа (`) — в качестве открывающей одиночной кавычки[25]. Поэтому в некоторых шрифтах, предназначенных для использования в терминалах (в частности, Terminus) апостроф может рисоваться с наклоном вправо, а тильда — быть сдвинутой вверх, чтобы они могли использоваться в качестве акута (´) и тильды сверху (˜).

Если в одной позиции дважды напечатать один и тот же символ, получится жирный символ; если в одной позиции напечатать символ и подчёркивание (_), получится подчёркнутый символ:

* `a` `BS` `a` → a
* `a` `BS` `_` → a

Эта техника до сих пор используется, например, в справочной системе man.

## Представление ASCII в ЭВМ

[править | править код]

На многих компьютерах 1950—1960-х годов минимально адресуемой единицей памяти было машинное слово, размер которого, как правило, был в разы больше размера символа. Зачастую для экономии памяти на таких компьютерах в одно слово упаковывали несколько символов. Так, например, на мейнфреймах PDP-10 с размером слова в 36 бит поначалу использовали шестибитные символы, размещая по 6 символов в слове, а после перехода на ASCII в одном слове стали размещать либо 5 семибитных символов (1 бит оставался незадействованным), либо 4 девятибитных символа[26].

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

### USASCII-8

[править | править код]

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

| .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

## Ввод с клавиатуры

[править | править код]

Расположение символов ASCII на клавиатуре согласно ANSI X4.14—1971: символы верхнего регистра вводятся в сочетании с клавишей `⇧ Shift`, а управляющие символы — с `Ctrl`[29].

~ ␞

¦ ␜

ESC

Q ␑

W ␗

E ␅

R ␒

T ␔

Y ␙

U ␕

I ␉

O ␏

P ␐

` ␀

{ ␛

_ ␟

Ctrl

A ␁

S ␓

D ␄

F ␆

G ␇

H ␈

J ␊

K ␋

L ␌

} ␝

Shift

Z ␚

X ␘

C ␃

V ␖

B ␂

N ␎

M ␍

Shift

На кодах символов ASCII основаны используемые в программировании промежуточные кроссплатформенные коды нажатых клавиш (в противовес скан-кодам IBM PC и прочим внутренним кодам). Ниже показано соответствие данных кодов клавишам для латинской раскладки QWERTY[30].

112

113

114

115

116

117

118

119

120

121

122

123

145

192

189

187

144

111

106

109

219

221

103

104

105

107

186

222

220

100

101

102

226

188

190

191

110

## Национальные варианты и расширения

[править | править код]

### 7-битные варианты

[править | править код]

Возможность адаптации ASCII под нужды других стран предусмотрена сразу в трёх тесно взаимосвязанных стандартах, появившихся во второй половине 1960-х годов, — ECMA-6 Европейской ассоциации производителей компьютеров, ISO 646 Международной организации по стандартизации (ныне — ISO/IEC 646) и Рекомендации V.3 (Международный алфавит № 5) Международного консультативного комитета по телеграфии и телефонии (ныне — Рекомендация T.50[англ.] (Международный справочный алфавит) Сектора стандартизации электросвязи МСЭ). Для этого предлагается заменять символы `@`, `[`, `\`, `]`, `^`, ```, `{`, `|`, `}` и `~` на национальные. Кроме того, допускается замена знака решётки (`#`) на знак фунта (`£`), а знака доллара (`$`) — на знак валюты (`¤`). Унифицированный вариант кода, не содержащий национальные символы, при этом обозначается как IRV (сокр. от англ. international reference version — «международная ссылочная версия»)[b]. ISO 646 IRV был утверждён в Советском Союзе в ГОСТ 13052 (ныне — ГОСТ 27463[31]) под названием КОИ-7 Н0.

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

* в одних на месте строчных латинских букв размещались национальные символы (для русского (КОИ-7 Н2) и греческого вариантов — заглавные буквы);
* в других предусматривалось переключение между ASCII (ISO 646 IRV) и национальным вариантом кода «на лету» с помощью символов SO и SI; в этом случае в национальном варианте можно было полностью заменить латинские буквы на национальные символы (как, например, в КОИ-7 Н1).

### 8-битные расширения

[править | править код]

В 1970-х годах начали появляться производные 8-битные кодировки (кодовые страницы), содержащие 28 = 256 кодовых позиций, в которых нижняя половина (позиции `0x00`—`0x7F`) кодовой таблицы, как правило, полностью совпадает с ASCII, а верхняя (позиции `0x80`—`0xFF`) служит для размещения дополнительных, в том числе национальных, символов. Подобные ASCII-совместимые кодировки, получившие неофициальное собирательное название «расширенный ASCII[англ.]», оказались удобнее упомянутых ранее 7-битных вариантов и широко использовались вплоть до начала повсеместного внедрения Юникода. Впрочем, отсутствие единого подхода к размещению дополнительных символов в их кодовых таблицах (например, кириллицы в ISO/IEC 8859-5, KOI8-R, Windows-1251 и т. д.) порождало множество проблем. Так, например, когда почтовые клиенты отправителя и получателя использовали различные кодировки для интерпретации текста письма, тот (за исключением символов ASCII) становился нечитаемым (превращался в так называемые кракозябры).

### ISO/IEC 10646 и Юникод

[править | править код]

Основная статья: Юникод

Символы ASCII включены в кодированные наборы символов двух тесно взаимосвязанных современных стандартов — ISO/IEC 10646 (UCS) и Юникода — под теми же самыми кодами (`0x00`—`0x7F`), благодаря чему их представление UTF-8 полностью обратно совместимо с 8-битным (см. выше) представлением ASCII. Таким образом, ISO/IEC 10646 и Юникод можно рассматривать как расширения ASCII.

## См. также

[править | править код]

* Переносимый набор символов
* YUSCII
* ASCII-графика

## Примечания

[править | править код]

### Комментарии

[править | править код]

1. ↑ В качестве знаков операций умножения (×) и деления (÷) было решено использовать звёздочку (*) и косую черту (/).
2. ↑ Действующие редакции международных ссылочных версий всех трёх упомянутых стандартов полностью совпадают с ASCII.

### Источники

[править | править код]

1. ↑ ASCII (англ.). The Cambridge English Dictionary. dictionary.cambridge.org. Дата обращения: 9 апреля 2018. Архивировано 27 сентября 2017 года.
2. ↑ Mackenzie, 1980, p. 211.
3. ↑ Internet Assigned Numbers Authority. Character Sets (англ.). Дата обращения: 18 ноября 2024. Архивировано 16 ноября 2024 года.
4. ↑ Иллингуорт, 1990, с. 28.
5. ↑ Mackenzie, 1980, p. 61.
6. ↑ 1 2 Fischer, 2000, p. 11.
7. ↑ 1 2 Fischer, 2000, p. 21.
8. ↑ Mackenzie, 1980, p. 66.
9. ↑ Mackenzie, 1980, p. 245—246.
10. ↑ Mackenzie, 1980, p. 423—428.
11. ↑ Fischer, 2000, p. 28.
12. ↑ 1 2 3 Mackenzie, 1980, p. 240.
13. ↑ Mackenzie, 1980, p. 246—247.
14. ↑ Mackenzie, 1980, p. 237.
15. ↑ Mackenzie, 1980, p. 234.
16. ↑ 1 2 Mackenzie, 1980, p. 235.
17. ↑ 1 2 Mackenzie, 1980, p. 225.
18. ↑ Mackenzie, 1980, p. 226.
19. ↑ Mackenzie, 1980, p. 222—224.
20. ↑ Mackenzie, 1980, p. 241.
21. ↑ Mackenzie, 1980, p. 239.
22. ↑ 1 2 3 Mackenzie, 1980, p. 236.
23. ↑ Mackenzie, 1980, p. 240—241.
24. ↑ 1 2 Mackenzie, 1980, p. 214—215.
25. ↑ 1 2 ASCII67, A5.2, p. 11—12.
26. ↑ Marshall Cline. Built-in / Intrinsic / Primitive Data Types, C++ FAQ. (Q: Would you please go over the rules about bytes, chars, and characters one more time?) (англ.). Дата обращения: 15 апреля 2025. Архивировано 3 апреля 2025 года.
27. ↑ Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. Architecture of the IBM System/360 (англ.) // IBM Journal of Research and Development. — 1964. — April (vol. 8, iss. 2). — P. 87—101. — doi:10.1147/rd.82.0087. Архивировано 19 февраля 2025 года.
28. ↑ Mackenzie, 1980, p. 399—400.
29. ↑ ANSI X4.14—1971: Alphanumeric Keyboard Arrangements Accommodating the Character Sets of ASCII and ASCSOCR (англ.)
30. ↑ Keys Enum (англ.). Microsoft.com. Дата обращения: 22 февраля 2025. Архивировано 1 февраля 2025 года.
31. ↑ ГОСТ 27463—87 (СТ СЭВ 356—86) «Системы обработки информации. 7-битные кодированные наборы символов».

## Литература

[править | править код]

* American Standard Code for Information Interchange, ASA X3.4—1963.
* USA Standard Code for Information Interchange, USAS X3.4—1967.
* USA Standard Code for Information Interchange, USAS X3.4—1968.
* American National Standard Code for Information Interchange, ANSI X3.4—1977.
* 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4—1986.

## Ссылки

[править | править код]

* Charles E. Mackenzie. Coded Character Sets, History and Development (англ.). — Addison-Wesley Publishing Company, Inc., 1980. — 513 p. — ISBN 0-201-14460-3.
* Fischer, Eric. The Evolution of Character Codes, 1874—1968 (англ.) PP. 11—28 (20 июня 2000). Дата обращения: 11 апреля 2025.
* Толковый словарь по вычислительным системам (рус.) / Под редакцией В. Иллингуорта и др.: Пер. с английского А. К. Белоцкого и др.; Под редакцией Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с.: ил. — 70 000 экз. — ISBN 5-217-00617-X.
* Ecma International. Standard ECMA-6: 7-bit coded character set (англ.). Дата обращения: 11 апреля 2025. Архивировано 3 апреля 2025 года.
* Tom Jennings. An annotated history of some character codes or ASCII: American Standard Code for Information Infiltration (англ.) (29 октября 2004). Архивировано из оригинала 15 июня 2013 года.
* Jim Price. ASCII Chart and Other Resources (англ.). JimPrice.Com (24 мая 2010). Дата обращения: 11 апреля 2025. Архивировано 4 апреля 2025 года.

Ссылки на внешние ресурсы

Словари и энциклопедии

* Большая датская
* Большая каталанская
* Большая норвежская
* Ларусса
* Britannica (онлайн)
* De Agostini
* Treccani

В библиографических каталогах|

* GND: 4665825-7
* J9U: 987007546943005171
* LCCN: sh98005902

Кодировки символов

алфавит
текст

файл
данные
набор символов
конверсия

Исторические|

докомп.
семафорная (Макарова)
телеграфные

Морзе
Бодо
ITA1
ITA2

МТК-2

комп.
6-битные

BCDIC
УПП
RADIX-50
EBCDIC

ДКОИ
ISO/IEC 646

ASCII
КОИ-7

Современное
8-битное
представление|

символы
ASCII

управляющие
печатные
не-ASCII

псевдографика
национальные

8-битные кодовые страницы
кириллица

КОИ-8
Основная кодировка
MacCyrillic

ISO/IEC 8859
1 (лат.)

5 (кир.)

12[англ.]

15 (€)

Windows
1250
1251 (кир.)
1252
1253
1254
1255[англ.]
1256[англ.]
1257[англ.]
1258[англ.]

IBM & DOS
437
850
852
855
866 («альтернативная»)
МИК[англ.]

Многобайтовые|

традиционные
DBCS[англ.]

Shift JIS
GB2312
Big5[англ.]
HTML

Юникод
UTF-1
UTF-7
UTF-8
UTF-16
UTF-32
UTF-EBCDIC
GB18030[англ.]
Punycode

раскладка клавиатуры
локаль
перевод строки
шрифт
транслит
нестандартные шрифты
утилиты

iconv
recode

ASCII

Управляющие символы
(`0x00`…`0x1F`)|

* NUL
* SOH
* STX
* ETX
* EOT
* ENQ
* ACK
* BEL
* BS
* HT
* LF
* VT
* FF
* CR
* SO
* SI

* DLE
* DC1
* DC2
* DC3
* DC4
* NAK
* SYN
* ETB
* CAN
* EM
* SUB
* ESC
* FS
* GS
* RS
* US

Цифры
и знаки препинания
(`0x20`…`0x3F`)|

*   * !
* "
* #
* $
* %
* &
* '
* (
* )
* *
* +
* ,
* -
* .
* /

* 0
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* :
* ;
* <
* =
* >
* ?

Заглавные буквы
(`0x40`…`0x5F`)|

* @
* A
* B
* C
* D
* E
* F
* G
* H
* I
* J
* K
* L
* M
* N
* O

* P
* Q
* R
* S
* T
* U
* V
* W
* X
* Y
* Z
* [
* \
* ]
* ^
* _

Строчные буквы
(`0x60`…`0x7F`)|

* `
* a
* b
* c
* d
* e
* f
* g
* h
* i
* j
* k
* l
* m
* n
* o

* p
* q
* r
* s
* t
* u
* v
* w
* x
* y
* z
* {
* |
* }
* ~
* DEL

Исключённые
символы|

* ←
* ↑
* ¬

Личности|

* Боб Бемер[англ.]
* Хью Макгрегор Росс[англ.]

*[Blaauw G. A.]: Блаау, Геррит
*[М.]: Москва