ASCII: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Добавление якоря для редиректа с ISO 646
7-битные коды: Уточнение про стандарты
Строка 481: Строка 481:
=== 7-битные коды ===
=== 7-битные коды ===
{{якорь|ISO 646}} <!-- Якорь для перенаправления со страницы ISO 646 -->
{{якорь|ISO 646}} <!-- Якорь для перенаправления со страницы ISO 646 -->
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять ими символы [[Коммерческое at|@]], [[Квадратные скобки|<nowiki>[</nowiki>]], [[Обратная косая черта|\]], [[Квадратные скобки|<nowiki>]</nowiki>]], [[Карет|^]], [[Машинописный обратный апостроф|`]], [[Фигурные скобки|{]], [[Вертикальная черта|<nowiki>|</nowiki>]], [[Фигурные скобки|}]], [[Тильда|~]]. Также допускается замена [[Знак решётки|знака решётки]] (#) на [[знак фунта]] (£), а [[Знак доллара|знака доллара]] ($) — на [[знак валюты]] (¤). Оригинальный американский вариант кода при этом обозначается US-ASCII, а унифицированный вариант, не содержащий национальные символы, — ISO 646 IRV{{efn|Действующая редакция данного стандарта (ISO/IEC 646:1991 IRV) полностью совпадает с US-ASCII.}} ({{tr-en|s='''I'''nternational '''R'''eference '''V'''ersion|международная ссылочная версия}}). Последний (в редакции 1983 года, отличающейся от US-ASCII только заменой символа $ на ¤) был утверждён в [[Союз Советских Социалистических Республик|Советском Союзе]] как [[КОИ-7]] Н0 в ГОСТ 27463-87 (СТ СЭВ 356-86)<ref>{{Cite web|url=http://docs.cntd.ru/document/1200021930|title=ГОСТ 27463-87 (СТ СЭВ 356-86) Системы обработки информации. 7-битные кодированные наборы символов (с Изменением N 1), ГОСТ от 29 октября 1987 года №27463-87|publisher=docs.cntd.ru|accessdate=2018-04-09|archive-date=2018-04-23|archive-url=https://web.archive.org/web/20180423032023/http://docs.cntd.ru/document/1200021930|deadlink=no}}</ref>.
Стандарт [[ISO]] 646 (ныне — [[ISO]]/[[IEC]] 646), утверждённый ассоциацией [[ECMA]] как ECMA-6 и ставший основой рекомендации [[МККТТ]] V.3 ({{iw|Международный алфавит № 5|IA5|en|International Alphabet No. 5}}) (ныне — рекомендация [[МСЭ-Т]] T.50 ({{iw|Международный справочный алфавит|IRA|en|International Reference Alphabet}})), предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять ими символы [[Коммерческое at|@]], [[Квадратные скобки|<nowiki>[</nowiki>]], [[Обратная косая черта|\]], [[Квадратные скобки|<nowiki>]</nowiki>]], [[Карет|^]], [[Машинописный обратный апостроф|`]], [[Фигурные скобки|{]], [[Вертикальная черта|<nowiki>|</nowiki>]], [[Фигурные скобки|}]], [[Тильда|~]]. Также допускается замена [[Знак решётки|знака решётки]] (#) на [[знак фунта]] (£), а [[Знак доллара|знака доллара]] ($) — на [[знак валюты]] (¤). Оригинальный американский вариант кода при этом обозначается US-ASCII, а унифицированный вариант, не содержащий национальные символы, — ISO 646 IRV{{efn|Действующая редакция данного стандарта (ISO/IEC 646:1991 IRV) полностью совпадает с US-ASCII.}} ({{tr-en|s='''I'''nternational '''R'''eference '''V'''ersion|международная ссылочная версия}}). Последний был утверждён в [[Союз Советских Социалистических Республик|Советском Союзе]] как [[КОИ-7]] Н0 в ГОСТ 27463 (СТ СЭВ 356).


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

Версия от 23:42, 16 ноября 2024

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

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

Описание

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

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

История

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

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

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

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

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

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

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

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

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

Кодовая таблица 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. ! " # $ % & ' ( ) * + , - . /
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 символа[13]:

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

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

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

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

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

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

  • Заголовок;
  • Текст.

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

Символ Код Расшифровка Перевод Описание
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 синхронное ожидание Этот символ передавался, когда (для синхронизации) было необходимо что-нибудь передать.
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 таким же способом можно добавить к буквам диакритические знаки, например:

  • a BS ' → á[b]
  • a BS ` → à
  • a BS ^ → â
  • o BS / → ø
  • c BS , → ç
  • n BS ~ → ñ[b]

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

  • a BS aa
  • a BS _a

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

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

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

USASCII-8

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

  .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 на клавиатуре согласно ANSI X4.14-1971: символы верхнего регистра вводятся в сочетании с клавишей ⇧ Shift, а управляющие символы — с Ctrl[26].

!
1
"
2
#
3
$
4
%
5
&
6
'
7
(
8
)
9

0
=
-
~ ␞
^
¦ ␜
\
BS
ESC
Q ␑
q
W ␗
w
E ␅
e
R ␒
r
T ␔
t
Y ␙
y
U ␕
u
I ␉
i
O ␏
o
P ␐
p
` ␀
@
{ ␛
[
_ ␟
Ctrl
A ␁
a
S ␓
s
D ␄
d
F ␆
f
G ␇
g
H ␈
h
J ␊
j
K ␋
k
L ␌
l
+
;
*
:
} ␝
]
CR
Shift
Z ␚
z
X ␘
x
C ␃
c
V ␖
v
B ␂
b
N ␎
n
M ␍
m
<
,
>
.
?
/
Shift
LF

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

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

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

7-битные коды

Стандарт ISO 646 (ныне — ISO/IEC 646), утверждённый ассоциацией ECMA как ECMA-6 и ставший основой рекомендации МККТТ V.3 (IA5[англ.]) (ныне — рекомендация МСЭ-Т T.50 (IRA[англ.])), предусматривает возможность размещения в ASCII национальных символов. Для этого предлагается заменять ими символы @, [, \, ], ^, `, {, |, }, ~. Также допускается замена знака решётки (#) на знак фунта (£), а знака доллара ($) — на знак валюты (¤). Оригинальный американский вариант кода при этом обозначается US-ASCII, а унифицированный вариант, не содержащий национальные символы, — ISO 646 IRV[c] (International Reference Version с англ. — «международная ссылочная версия»). Последний был утверждён в Советском Союзе как КОИ-7 Н0 в ГОСТ 27463 (СТ СЭВ 356).

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

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

8-битные коды

Со временем стали появляться производные 8-битные кодировки (кодовые страницы), содержащие 28 = 256 кодовых позиций, в которых нижняя половина кодовой таблицы (позиции 0x000x7F) совпадает с ASCII, а верхняя (позиции 0x800xFF) служит для размещения дополнительных, в том числе национальных, символов. Подобные ASCII-совместимые кодировки, получившие неофициальное собирательное название «Расширенный ASCII[англ.]», оказались удобнее упомянутых ранее 7-битных вариантов и широко использовались вплоть до начала повсеместного внедрения Юникода. Впрочем, отсутствие единого подхода к размещению национальных символов в их кодовых таблицах (например, кириллицы в КОИ-8, Windows-1251, ISO 8859-5 и т. д.) порождало множество проблем. Так, например, когда почтовые клиенты отправителя и получателя электронного письма использовали различные кодировки для его интерпретации, текст письма (за исключением символов ASCII) становился нечитаемым.

Юникод

Символы ASCII включены в Юникод под теми же самыми кодами (0x000x7F), благодаря чему UTF-8 полностью обратно совместим с 8-битным представлением ASCII. Таким образом, Юникод также можно считать одним из расширений ASCII.

См. также

Примечания

Комментарии

  1. В качестве знаков умножения (×) и деления (÷) было решено использовать астериск (*) и косую черту (/).
  2. 1 2 В старых шрифтах апостроф (') рисовался с наклоном влево, а тильда (~) была сдвинута вверх, поэтому они могли использоваться в качестве символов «акут» (´) и «тильда сверху» (˜).
  3. Действующая редакция данного стандарта (ISO/IEC 646:1991 IRV) полностью совпадает с US-ASCII.

Источники

  1. ASCII (англ.). The Cambridge English Dictionary. dictionary.cambridge.org. Дата обращения: 9 апреля 2018. Архивировано 27 сентября 2017 года.
  2. Mackenzie, 1980, p. 211.
  3. Иллингуорт, 1990, с. 28.
  4. Mackenzie, 1980, p. 61.
  5. 1 2 Fischer, 2000, p. 11.
  6. 1 2 Fischer, 2000, p. 21.
  7. Mackenzie, 1980, p. 66.
  8. Mackenzie, 1980, p. 245—246.
  9. Mackenzie, 1980, p. 423—428.
  10. Fischer, 2000, p. 28.
  11. 1 2 3 Mackenzie, 1980, p. 240.
  12. Mackenzie, 1980, p. 246—247.
  13. Mackenzie, 1980, p. 237.
  14. Mackenzie, 1980, p. 234.
  15. 1 2 Mackenzie, 1980, p. 235.
  16. 1 2 Mackenzie, 1980, p. 225.
  17. Mackenzie, 1980, p. 226.
  18. Mackenzie, 1980, p. 222—224.
  19. Mackenzie, 1980, p. 239.
  20. 1 2 3 Mackenzie, 1980, p. 236.
  21. Mackenzie, 1980, p. 241.
  22. Mackenzie, 1980, p. 240—241.
  23. 1 2 Mackenzie, 1980, p. 214—215.
  24. Amdahl G. M., Blaauw G. A., Brooks F. P., Jr. «Architecture of the IBM system/360». 1964
  25. Mackenzie, 1980, p. 399—400.
  26. ANSI X4.14-1971: Alphanumeric Keyboard Arrangements Accommodating the Character Sets of ASCII and ASCSOCR (англ.)
  27. Keys Enum. Microsoft.com. Дата обращения: 11 июня 2022. Архивировано 11 июня 2022 года.

Литература

  • 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. — ISBN 0-201-14460-3.
  • Fischer, Eric The Evolution of Character Codes, 1874–1968 (англ.) 14–15 (Table 35) (20 июня 2000). Дата обращения: 30 ноября 2022. Архивировано 30 ноября 2022 года.
  • Толковый словарь по вычислительным системам / Под редакцией В. Иллингуорта и др.: Пер. с английского А.К. Белоцкого и др.; Под редакцией Е.К. Масловского. — М.: Машиностроение, 1990. — ISBN 5-217-00617-X.
  • 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). Архивировано 17 июля 2011 года.
  • ASCII chart and other resources (англ.). JimPrice.Com.