ASCII ( / ˈ æ s k iː / ASS-kee),[3]: 6 аббревиатура отAmerican Standard Code for Information Interchange, являетсякодировки символовдля электронной связи. Коды ASCII представляют текст в компьютерах,телекоммуникационном оборудованиии других устройствах. ASCII имеет всего 128кодовых точек, из которых только 95 являются печатными символами, что серьезно ограничивает его область применения. Набор доступных знаков препинания оказал значительное влияние на синтаксис компьютерных языков и разметку текста. ASCII оказал огромное влияние на дизайн наборов символов, используемых современными компьютерами, включаяUnicode, который имеет более миллиона кодовых точек, но первые 128 из них совпадают с ASCII.
Администрация адресного пространства Интернета (IANA) предпочитает использовать для этой кодировки символов название US-ASCII . [2]
ASCII является одним из важнейших достижений IEEE . [4]
ASCII был разработан частично из телеграфного кода . Его первое коммерческое использование было в Teletype Model 33 и Teletype Model 35 в качестве семибитного телетайпного кода, продвигаемого Bell data services. [ когда? ] Работа над стандартом ASCII началась в мае 1961 года с первого заседания подкомитета X3.2 Американской ассоциации стандартов (ASA) (теперь Американский национальный институт стандартов или ANSI). Первое издание стандарта было опубликовано в 1963 году, [5] [6] подверглось существенному пересмотру в 1967 году, [7] [8] и испытало свое последнее обновление в 1986 году. [9] По сравнению с более ранними телеграфными кодами, предложенный код Bell и ASCII были заказаны для более удобной сортировки (т. е. алфавитного расположения) списков и дополнительных функций для устройств, отличных от телетайпов. [9]
Использование формата ASCII для сетевого обмена данными было описано в 1969 году. [10] Этот документ был официально повышен до уровня стандарта Интернета в 2015 году. [11]
Первоначально основанный на (современном) английском алфавите , ASCII кодирует 128 указанных символов в семибитные целые числа, как показано в таблице ASCII в этой статье. [12] Девяносто пять из закодированных символов являются печатными: они включают цифры от 0 до 9 , строчные буквы от a до z , заглавные буквы от A до Z и знаки препинания . Кроме того, исходная спецификация ASCII включала 33 непечатаемых управляющих кода , которые возникли в моделях Teletype ; большинство из них сейчас устарели, [13] хотя некоторые все еще широко используются, такие как коды возврата каретки , перевода строки и табуляции .
Например, строчная буква i будет представлена в кодировке ASCII как двоичное число 1101001 = шестнадцатеричное число 69 ( i — девятая буква) = десятичное число 105.
Несмотря на то, что ASCII является американским стандартом, в нем нет кодовой точки для цента ( ¢). Он также не поддерживает английские термины с диакритическими знаками, такие как résumé и jalapeño , или собственные имена с диакритическими знаками, такие как Beyoncé (хотя на некоторых устройствах символы могут сочетаться со знаками препинания, такими как тильда (~) и обратный апостроф (`), чтобы аппроксимировать такие символы.)
Американский стандартный код для обмена информацией (ASCII) был разработан под эгидой комитета Американской ассоциации стандартов (ASA), называемого комитетом X3, его подкомитетом X3.2 (позже X3L2), а затем рабочей группой X3.2.4 этого подкомитета (теперь INCITS ). Позднее ASA стал Институтом стандартов Соединенных Штатов Америки (USASI) [3] : 211 и в конечном итоге стал Американским национальным институтом стандартов (ANSI).
После заполнения других специальных символов и управляющих кодов ASCII был опубликован как ASA X3.4-1963, [6] [14] оставив 28 позиций кода без какого-либо назначенного значения, зарезервированных для будущей стандартизации, и один неназначенный управляющий код. [3] : 66, 245 В то время велись дебаты о том, должно ли быть больше управляющих символов вместо строчных букв. [3] : 435 Нерешительность длилась недолго: в мае 1963 года Рабочая группа CCITT по новому телеграфному алфавиту предложила назначить строчные символы палочкам [ a] [15] 6 и 7, [16] а Международная организация по стандартизации TC 97 SC 2 проголосовала в октябре за включение изменения в свой проект стандарта. [17] Целевая группа X3.2.4 проголосовала за одобрение изменения в ASCII на своем заседании в мае 1963 года. [18] Расположение строчных букв в палочках [a] [15] 6 и 7 привело к тому, что символы отличались по битовой схеме от заглавных на один бит, что упростило сопоставление символов без учета регистра и конструкцию клавиатур и принтеров.
Комитет X3 внес другие изменения, включая другие новые символы ( фигурные скобки и вертикальная черта ), [19] переименовав некоторые управляющие символы (SOM стал началом заголовка (SOH)) и переместив или удалив другие (RU был удален). [3] : 247–248 ASCII впоследствии был обновлен как USAS X3.4-1967, [7] [20] затем USAS X3.4-1968, [21] ANSI X3.4-1977 и, наконец, ANSI X3.4-1986. [9] [22]
В стандарте X3.15 комитет X3 также рассматривал, как следует передавать ASCII ( сначала младший бит ) [3] : 249–253 [29] и записывать на перфорированную ленту. Они предложили 9-дорожечный стандарт для магнитной ленты и попытались работать с некоторыми форматами перфокарт .
Подкомитет X3.2 разработал ASCII на основе более ранних систем кодирования телетайпов. Как и другие кодировки символов , ASCII определяет соответствие между цифровыми битовыми шаблонами и символьными символами (то есть графемами и управляющими символами ). Это позволяет цифровым устройствам взаимодействовать друг с другом и обрабатывать, хранить и передавать ориентированную на символы информацию, такую как письменный язык. До разработки ASCII используемые кодировки включали 26 буквенных символов, 10 числовых цифр и от 11 до 25 специальных графических символов. Чтобы включить все это и управляющие символы, совместимые со стандартом Международного телеграфного алфавита № 2 (ITA2) Консультативного комитета по международной телефонии и телеграфии (CCITT) 1932 года [30] [31] FIELDATA (1956 [ требуется ссылка ] ) и ранним EBCDIC (1963), для ASCII требовалось более 64 кодов.
ITA2, в свою очередь, был основан на коде Бодо , 5-битном телеграфном коде, изобретенном Эмилем Бодо в 1870 году и запатентованном в 1874 году. [31]
Комитет обсуждал возможность функции сдвига (как в ITA2 ), которая позволила бы представить более 64 кодов шестибитным кодом . В сдвинутом коде некоторые коды символов определяют выбор между вариантами для следующих кодов символов. Это позволяет компактное кодирование, но менее надежно для передачи данных , поскольку ошибка при передаче кода сдвига обычно делает длинную часть передачи нечитаемой. Комитет по стандартам принял решение против сдвига, и поэтому ASCII потребовал как минимум семибитный код. [3] : 215 §13.6, 236 §4
Комитет рассматривал восьмибитный код, поскольку восемь бит ( октетов ) позволили бы двум четырехбитным шаблонам эффективно кодировать две цифры с помощью двоично-десятичного кода . Однако это потребовало бы, чтобы вся передача данных отправляла восемь бит, когда семи могло бы быть достаточно. Комитет проголосовал за использование семибитного кода, чтобы минимизировать затраты, связанные с передачей данных. Поскольку перфорированная лента в то время могла записывать восемь бит в одной позиции, она также допускала бит четности для проверки ошибок , если это было необходимо. [3] : 217 §c, 236 §5 Восьмибитные машины (с октетами в качестве собственного типа данных), которые не использовали проверку четности, обычно устанавливали восьмой бит в 0. [32]
Сам код был структурирован таким образом, что большинство управляющих кодов были вместе, и все графические коды были вместе, для простоты идентификации. Первые две так называемые палочки ASCII [a] [15] (32 позиции) были зарезервированы для управляющих символов. [3] : 220, 236 8, 9) Символ «пробел» должен был идти перед графикой, чтобы упростить сортировку , поэтому он стал позицией 20 hex ; [3] : 237 §10 по той же причине многие специальные знаки, обычно используемые в качестве разделителей, были помещены перед цифрами. Комитет решил, что важно поддерживать заглавные 64-символьные алфавиты , и решил структурировать ASCII так, чтобы его можно было легко сократить до пригодного для использования 64-символьного набора графических кодов, [3] : 228, 237 §14 , как это было сделано в коде DEC SIXBIT (1963). Поэтому строчные буквы не чередовались с заглавными . Чтобы сохранить опции, доступные для строчных букв и другой графики, специальные и числовые коды были расположены перед буквами, а буква A была помещена в позицию 41 в шестнадцатеричной системе счисления , чтобы соответствовать проекту соответствующего британского стандарта. [3] : 238 §18 Цифры 0–9 имеют префикс 011, но оставшиеся 4 бита соответствуют их соответствующим значениям в двоичной системе счисления, что делает преобразование с двоично-десятичным кодом простым (например, 5 в кодировке 011 0101 , где 5 — это 0101 в двоичной системе счисления).
Многие из не буквенно-цифровых символов были расположены так, чтобы соответствовать их смещенному положению на пишущих машинках; важная тонкость заключается в том, что они были основаны на механических пишущих машинках, а не на электрических . [33] Механические пишущие машинки следовали фактическому стандарту , установленному Remington No. 2 (1878), первой пишущей машинкой с клавишей Shift, и смещенные значения были 23456789-
– "#$%_&'()
ранние пишущие машинки опускали 0 и 1 , используя вместо этого O (заглавную букву o ) и l (строчную букву L ), но 1!
и 0)
пары стали стандартными, как только 0 и 1 стали обычными. Таким образом, в ASCII !"#$%
были помещены во вторую палочку, [a] [15] позиции 1–5, соответствующие цифрам 1–5 на соседней палочке. [a] [15] Однако скобки не могли соответствовать 9 и 0 , поскольку место, соответствующее 0, было занято символом пробела. Это было достигнуто путем удаления _
(подчеркивания) из цифры 6 и сдвига оставшихся символов, что соответствовало многим европейским пишущим машинкам, которые ставили скобки перед цифрами 8 и 9. Это отличие от пишущих машинок привело к появлению клавиатур с парными битами , в частности, Teletype Model 33 , которая использовала смещенную влево раскладку, соответствующую ASCII, в отличие от традиционных механических пишущих машинок.
Электрические пишущие машинки, в частности IBM Selectric (1961), использовали несколько иную раскладку, которая стала фактическим стандартом для компьютеров — после IBM PC (1981), особенно Model M (1984) — и поэтому значения сдвига для символов на современных клавиатурах не так точно соответствуют таблице ASCII, как на более ранних клавиатурах. /?
Пара также относится к № 2, и ,< .>
пары использовались на некоторых клавиатурах (другие, включая № 2, не сдвигали ,
(запятую) или .
(точку), поэтому их можно было использовать в верхнем регистре без отмены сдвига). Однако ASCII разделила ;:
пару (относящуюся к № 2) и переставила математические символы (различные соглашения, обычно -* =+
) в :* ;+ -=
.
Некоторые распространенные в то время символы пишущей машинки не были включены, в частности ½ ¼ ¢
, в то время как ^ ` ~
были включены в качестве диакритических знаков для международного использования и < >
для математического использования вместе с простыми линейными символами \ |
(в дополнение к распространенному /
). Символ @ не использовался в континентальной Европе, и комитет ожидал, что он будет заменен акцентированной À во французском варианте, поэтому @ был помещен в позицию 40 hex , прямо перед буквой A. [3] : 243
Управляющие коды, которые считались необходимыми для передачи данных, были: начало сообщения (SOM), конец адреса (EOA), конец сообщения (EOM), конец передачи (EOT), «кто вы?» (WRU), «вы?» (RU), зарезервированное управление устройством (DC0), синхронный холостой ход (SYNC) и подтверждение (ACK). Они были расположены так, чтобы максимизировать расстояние Хэмминга между их битовыми комбинациями. [3] : 243–245
Порядок ASCII-кода также называется ASCIIбетическим порядком. [34] Сопоставление данных иногда выполняется в этом порядке, а не в «стандартном» алфавитном порядке ( последовательность сопоставления ). Основные отклонения в порядке ASCII:
Промежуточный порядок преобразует заглавные буквы в строчные перед сравнением значений ASCII.
ASCII резервирует первые 32 кодовых точки (числа 0–31 в десятичной системе) и последнюю (число 127 в десятичной системе) для управляющих символов . Это коды, предназначенные для управления периферийными устройствами (например, принтерами ) или для предоставления метаинформации о потоках данных, например, хранящихся на магнитной ленте. Несмотря на свое название, эти кодовые точки не представляют собой печатаемые символы (т. е. они вообще не являются символами, а являются сигналами). Для целей отладки им назначаются символы-"заполнители" (например, приведенные в ISO 2047 и его предшественниках).
Например, символ 0x0A представляет функцию «перевода строки» (которая заставляет принтер продвигать бумагу), а символ 8 представляет « возврат на одну позицию ». RFC 2822 называет управляющие символы, которые не включают возврат каретки, перевод строки или пробел , непробельными управляющими символами. [35] За исключением управляющих символов, которые предписывают элементарное строчно-ориентированное форматирование, ASCII не определяет никаких механизмов для описания структуры или внешнего вида текста в документе. Другие схемы, такие как языки разметки , адресная страница и макет документа и форматирование.
В исходном стандарте ASCII для каждого управляющего символа использовались только короткие описательные фразы. Неоднозначность, которую это вызывало, иногда была преднамеренной, например, когда символ использовался немного иначе в терминальной ссылке, чем в потоке данных , а иногда случайной, например, в стандарте неясно значение слова «удалить».
Вероятно, наиболее влиятельным устройством, повлиявшим на интерпретацию этих символов, был Teletype Model 33 ASR, который представлял собой печатающий терминал с возможностью считывания/перфорации бумажной ленты . Бумажная лента была очень популярным носителем для долгосрочного хранения программ до 1980-х годов, менее дорогостоящим и в некотором смысле менее хрупким, чем магнитная лента. В частности, назначения машины Teletype Model 33 для кодов 17 (control-Q, DC1, также известный как XON), 19 (control-S, DC3, также известный как XOFF) и 127 ( delete ) стали фактическими стандартами. Модель 33 также была примечательна тем, что буквально воспринимала описание control-G (код 7, BEL, что означает звуковое оповещение оператора), поскольку устройство содержало настоящий колокольчик, который звонил при получении символа BEL. Поскольку на верхней части клавиши O также был изображен символ стрелки влево (из ASCII-1963, в котором этот символ использовался вместо подчеркивания ), несоответствующее требованиям использование кода 15 (control-O, shift), интерпретируемое как «удаление предыдущего символа», также было принято многими ранними системами с разделением времени, но в конечном итоге от него отказались.
Когда Teletype 33 ASR, оснащенный автоматическим считывателем бумажной ленты, получал control-S (XOFF, сокращение от «передача выключена»), это приводило к остановке считывателя ленты; прием control-Q (XON, передача включена) приводил к возобновлению работы считывателя ленты. Этот так называемый метод управления потоком был принят несколькими ранними компьютерными операционными системами в качестве сигнала «рукопожатия», предупреждающего отправителя о необходимости остановить передачу из-за надвигающегося переполнения буфера ; он сохраняется и по сей день во многих системах как метод ручного управления выводом. В некоторых системах control-S сохраняет свое значение, но control-Q заменяется вторым control-S для возобновления вывода.
33 ASR также можно было настроить на использование control-R (DC2) и control-T (DC4) для запуска и остановки перфорации ленты; на некоторых устройствах, оснащенных этой функцией, соответствующие управляющие символы на колпачке клавиши над буквой были TAPE и TAPE соответственно. [36]
Телетайп не мог двигать пишущую головку назад, поэтому на его клавиатуре не было клавиши для отправки BS (возврат на одну позицию). Вместо этого была клавиша, помеченная RUB OUTкак отправляющая код 127 (DEL). Целью этой клавиши было стирание ошибок на бумажной ленте с ручным вводом: оператор должен был нажать кнопку на перфораторе ленты, чтобы сделать резервную копию, затем набрать стирание, которое пробивало все отверстия и заменяло ошибку символом, который должен был игнорироваться. [37] Телетайпы обычно использовались с менее дорогими компьютерами от Digital Equipment Corporation (DEC); эти системы должны были использовать доступные клавиши, и поэтому символ DEL был назначен для стирания предыдущего символа. [38] [39] Из-за этого видеотерминалы DEC (по умолчанию) отправляли символ DEL для клавиши, помеченной как «Backspace», в то время как отдельная клавиша, помеченная как «Delete», отправляла escape-последовательность ; многие другие конкурирующие терминалы отправляли символ BS для клавиши возврата на одну позицию.
Ранние драйверы tty Unix, в отличие от некоторых современных реализаций, позволяли устанавливать только один символ для стирания предыдущего символа в канонической обработке ввода (где доступен очень простой редактор строк); это могло быть установлено на BS или DEL, но не на оба, что приводило к повторяющимся ситуациям неоднозначности, когда пользователи должны были выбирать в зависимости от того, какой терминал они использовали ( оболочки , которые позволяют редактировать строки, такие как ksh , bash и zsh , понимают оба). Предположение, что ни одна клавиша не отправляет символ BS, позволяло использовать Ctrl+H для других целей, таких как команда префикса "help" в GNU Emacs . [40]
Многим другим управляющим символам были присвоены значения, сильно отличающиеся от их первоначальных. Например, символ «escape» (ESC, код 27) изначально предназначался для отправки других управляющих символов как литералов вместо вызова их значения, «escape-последовательности». Это то же самое значение «escape», которое встречается в кодировках URL, строках языка C и других системах, где определенные символы имеют зарезервированное значение. Со временем эта интерпретация была принята и в конечном итоге была изменена.
В современном использовании ESC, отправленный на терминал, обычно указывает на начало последовательности команд, которая может использоваться для обращения к курсору, прокрутки региона, установки/запроса различных свойств терминала и многого другого. Они обычно имеют форму так называемого " ANSI escape code " (часто начинающегося с " Control Sequence Introducer ", "CSI", " ESC [ ") из ECMA-48 (1972) и его последователей. Некоторые escape-последовательности не имеют вводных, например, команда полного сброса VT100 " ESC c ". [41]
Напротив, ESC, считанный с терминала, чаще всего используется как внеполосный символ, используемый для завершения операции или специального режима, как в текстовых редакторах TECO и vi . В графическом пользовательском интерфейсе (GUI) и оконных системах ESC обычно заставляет приложение прервать текущую операцию или выйти (завершить работу) вообще.
Присущая многим управляющим символам неоднозначность в сочетании с их историческим использованием создавала проблемы при передаче файлов «обычного текста» между системами. Лучшим примером этого является проблема новой строки в различных операционных системах . Телетайпы требовали, чтобы строка текста завершалась как «возвратом каретки» (который перемещает печатающую головку в начало строки), так и «переводом строки» (который перемещает бумагу на одну строку без перемещения печатающей головки). Название «возврат каретки» происходит от того факта, что на ручной пишущей машинке каретка, удерживающая бумагу, движется, в то время как пишущие планки, ударяющие по ленте, остаются неподвижными. Вся каретка должна была быть сдвинута (возвращена) вправо, чтобы расположить бумагу для следующей строки.
Операционные системы DEC ( OS/8 , RT-11 , RSX-11 , RSTS , TOPS-10 и т. д.) использовали оба символа для обозначения конца строки, чтобы консольное устройство (первоначально телетайпные машины) работало. К тому времени, когда появились так называемые «стеклянные TTY» (позже названные CRT или «немыми терминалами»), соглашение было настолько устоявшимся, что обратная совместимость требовала продолжения его соблюдения. Когда Гэри Килдалл создавал CP/M , он был вдохновлен некоторыми соглашениями интерфейса командной строки, используемыми в операционной системе RT-11 компании DEC.
До появления PC DOS в 1981 году IBM не имела никакого влияния на это, поскольку их операционные системы 1970-х годов использовали кодировку EBCDIC вместо ASCII, и они были ориентированы на ввод с перфокарт и вывод на строчный принтер, на котором концепция «возврата каретки» была бессмысленной. PC DOS от IBM (также продаваемая как MS-DOS корпорацией Microsoft) унаследовала это соглашение в силу того, что была в некоторой степени основана на CP/M, [42] а Windows , в свою очередь, унаследовала его от MS-DOS.
Требование двух символов для обозначения конца строки вносит ненужную сложность и двусмысленность в отношении того, как интерпретировать каждый символ, когда он встречается сам по себе. Для упрощения вопроса потоки данных обычного текста , включая файлы, на Multics использовали только перевод строки (LF) в качестве символа конца строки. [43] : 357 Драйвер tty будет обрабатывать преобразование LF в CRLF на выходе, чтобы файлы можно было напрямую печатать на терминале, а NL (новая строка) часто используется для обозначения CRLF в документах UNIX . Unix и Unix-подобные системы, а также системы Amiga переняли это соглашение от Multics. С другой стороны, оригинальные Macintosh OS , Apple DOS и ProDOS использовали только возврат каретки (CR) в качестве символа конца строки; однако, поскольку Apple позже заменила эти устаревшие операционные системы своей операционной системой macOS на основе Unix (ранее называвшейся OS X), теперь они также используют перевод строки (LF). Radio Shack TRS-80 также использовал одиночный CR для завершения строк.
Компьютеры, подключенные к ARPANET, включали машины, работающие под управлением операционных систем, таких как TOPS-10 и TENEX, использующих окончания строк CR-LF; машины, работающие под управлением операционных систем, таких как Multics, использующих окончания строк LF; и машины, работающие под управлением операционных систем, таких как OS/360 , которые представляли строки как количество символов, за которыми следовали символы строки, и которые использовали кодировку EBCDIC, а не ASCII. Протокол Telnet определял ASCII «сетевой виртуальный терминал» (NVT), так что соединения между хостами с различными соглашениями о завершении строк и наборами символов могли поддерживаться путем передачи стандартного текстового формата по сети. Telnet использовал ASCII вместе с окончаниями строк CR-LF, а программное обеспечение, использующее другие соглашения, могло выполнять перевод между локальными соглашениями и NVT. [44] Протокол передачи файлов принял протокол Telnet, включая использование сетевого виртуального терминала, для использования при передаче команд и передаче данных в режиме ASCII по умолчанию. [45] [46] Это усложняет реализацию этих протоколов и других сетевых протоколов, таких как те, которые используются для электронной почты и Всемирной паутины, в системах, не использующих соглашение NVT об окончании строки CR-LF. [47] [48]
Монитор PDP-6 [38] и его преемник PDP-10 TOPS-10 [39] использовали control-Z (SUB) в качестве обозначения конца файла для ввода с терминала. Некоторые операционные системы, такие как CP/M, отслеживали длину файла только в единицах дисковых блоков и использовали control-Z для обозначения конца фактического текста в файле. [49] По этим причинам EOF, или конец файла , использовался в разговорной речи и традиционно как трехбуквенное сокращение для control-Z вместо SUBstitute. Символ конца текста ( ETX ), также известный как control-C , был неподходящим по ряду причин, в то время как использование control-Z в качестве управляющего символа для завершения файла аналогично положению буквы Z в конце алфавита и служит очень удобным мнемоническим средством . Исторически распространенное и по-прежнему распространенное соглашение использует соглашение о символах ETX для прерывания и остановки программы посредством входного потока данных, обычно с клавиатуры.
Драйвер терминала Unix использует символ конца передачи ( EOT ), также известный как control-D, для обозначения конца потока данных.
В языке программирования C и в соглашениях Unix нулевой символ используется для завершения текстовых строк ; такие строки с нулевым символом в конце могут быть сокращенно известны как ASCIZ или ASCIIZ, где Z означает «ноль».
Специализированное оборудование может использовать и другие представления, например, графику ISO 2047 или шестнадцатеричные числа.
Коды от 20 hex до 7E hex , известные как печатные символы, представляют собой буквы, цифры, знаки препинания и несколько различных символов. Всего существует 95 печатных символов. [n]
Код 20 hex , символ "пробел", обозначает пробел между словами, как это сделано с помощью клавиши пробела на клавиатуре. Поскольку символ пробела считается невидимой графикой (а не управляющим символом) [3] : 223 [10], он указан в таблице ниже, а не в предыдущем разделе.
Код 7F hex соответствует непечатаемому управляющему символу «удалить» (DEL) и поэтому опущен в этой таблице; он рассматривается в таблице предыдущего раздела. Более ранние версии ASCII использовали стрелку вверх вместо каретки ( 5E hex ) и стрелку влево вместо подчеркивания (5F hex ). [6] [50]
ASCII впервые был использован в коммерческих целях в 1963 году как семибитный код телетайпа для сети TWX (TeletypeWriter eXchange) компании American Telephone & Telegraph . Первоначально TWX использовал более ранний пятибитный ITA2 , который также использовался конкурирующей системой телетайпа Telex . Боб Бемер представил такие функции, как escape-последовательность . [5] Его британский коллега Хью Макгрегор Росс помог популяризировать эту работу — по словам Бемера, «настолько, что код, который должен был стать ASCII, впервые был назван кодом Бемера–Росса в Европе». [51] Из-за его обширной работы над ASCII Бемера называют «отцом ASCII». [52]
11 марта 1968 года президент США Линдон Б. Джонсон постановил, что все компьютеры, приобретаемые федеральным правительством США, должны поддерживать ASCII, заявив: [53] [54] [55]
Я также одобрил рекомендации министра торговли [ Лютера Х. Ходжеса ] относительно стандартов записи стандартного кода для обмена информацией на магнитных лентах и бумажных лентах при их использовании в компьютерных операциях. Все компьютеры и сопутствующие конфигурации оборудования, внесенные в инвентарь Федерального правительства с 1 июля 1969 года, должны иметь возможность использовать стандартный код для обмена информацией и форматы, предписанные стандартами магнитной ленты и бумажной ленты при использовании этих носителей.
ASCII была самой распространённой кодировкой символов во Всемирной паутине до декабря 2007 года, пока её не превзошла кодировка UTF-8 ; UTF-8 обратно совместима с ASCII. [56] [57] [58]
По мере распространения компьютерных технологий по всему миру различные организации по стандартизации и корпорации разработали множество вариаций ASCII для облегчения выражения неанглийских языков, использующих алфавиты на основе латиницы. Некоторые из этих вариаций можно было бы классифицировать как « расширения ASCII », хотя некоторые неправильно используют этот термин для обозначения всех вариантов, включая те, которые не сохраняют таблицу символов ASCII в 7-битном диапазоне. Более того, расширения ASCII также были неправильно обозначены как ASCII.
С самого начала своей разработки [59] ASCII задумывался как всего лишь один из нескольких национальных вариантов международного стандарта кодировки символов.
Другие международные органы по стандартизации ратифицировали кодировки символов, такие как ISO 646 (1967), которые идентичны или почти идентичны ASCII, с расширениями для символов за пределами английского алфавита и символов, используемых за пределами Соединенных Штатов, таких как символ фунта стерлингов Соединенного Королевства (£); например, с кодовой страницей 1104. Почти каждой стране требовалась адаптированная версия ASCII, поскольку ASCII соответствовала потребностям только США и нескольких других стран. Например, у Канады была своя версия, которая поддерживала французские символы.
Во многих других странах были разработаны варианты ASCII, включающие неанглийские буквы (например, é , ñ , ß , Ł ), символы валют (например, £ , ¥ ) и т. д. См. также YUSCII (Югославия).
Он бы разделял большинство общих символов, но назначал бы другие локально полезные символы нескольким кодовым точкам, зарезервированным для «национального использования». Однако четыре года, прошедшие между публикацией ASCII-1963 и первым принятием ISO международной рекомендации в 1967 году [60], привели к тому, что выбор ASCII для национальных символов стал фактическим стандартом для всего мира, что вызвало путаницу и несовместимость, когда другие страны начали делать свои собственные назначения для этих кодовых точек.
ISO/IEC 646, как и ASCII, представляет собой 7-битный набор символов. Он не предоставляет никаких дополнительных кодов, поэтому одни и те же кодовые точки кодировали разные символы в разных странах. Escape-коды были определены для указания того, какой национальный вариант применяется к фрагменту текста, но они редко использовались, поэтому часто было невозможно узнать, с каким вариантом работать и, следовательно, какой символ представляет код, и в целом системы обработки текста могли справиться только с одним вариантом.
Поскольку символы квадратных и фигурных скобок ASCII были назначены кодовым точкам «национального использования», которые использовались для букв с диакритическими знаками в других национальных вариантах ISO/IEC 646, немецкий, французский, шведский и т. д. программист, использующий свой национальный вариант ISO/IEC 646, а не ASCII, должен был написать и, следовательно, прочитать что-то вроде
ä aÄiÜ = 'Ön'; ü
вместо
{ a[i] = '\n'; }
Триграфы C были созданы для решения этой проблемы для ANSI C , хотя их позднее введение и непоследовательная реализация в компиляторах ограничивали их использование. Многие программисты использовали на своих компьютерах ASCII, поэтому простой текст на шведском, немецком и т. д. (например, в электронной почте или Usenet ) содержал "{, }" и подобные варианты в середине слов, к чему эти программисты привыкли. Например, шведский программист, отправляющий другому программисту письмо с вопросом, не пойти ли ему на обед, мог получить в качестве ответа "N{ jag har sm|rg}sar", что должно было быть "Nä jag har smörgåsar", что означает "Нет, у меня есть сэндвичи".
В Японии и Корее, по состоянию на 2020-е годы, [обновлять]используется вариация ASCII, в которой обратная косая черта (шестнадцатеричный код 5C) отображается как ¥ ( знак иены в Японии) или ₩ ( знак воны в Корее). Это означает, что, например, путь к файлу C:\Users\Smith отображается как C:¥Users¥Smith (в Японии) или C:₩Users₩Smith (в Корее).
В Европе наборы символов телетекста , которые являются вариантами ASCII, используются для субтитров вещательного телевидения, определенных Всемирной системой телетекста и транслируемых с использованием стандарта DVB-TXT для встраивания телетекста в передачи DVB. [61] В случае, если субтитры изначально были созданы для телетекста и преобразованы, производные форматы субтитров ограничены теми же наборами символов.
В конце концов, когда 8-, 16- и 32-битные (а позже и 64-битные ) компьютеры начали заменять 12- , 18- и 36-битные компьютеры в качестве нормы, стало обычным использовать 8-битный байт для хранения каждого символа в памяти, предоставляя возможность для расширенных 8-битных родственников ASCII. В большинстве случаев они развивались как истинные расширения ASCII, оставляя исходное отображение символов нетронутым, но добавляя дополнительные определения символов после первых 128 (т. е. 7-битных) символов. Сам ASCII оставался семибитным кодом: термин «расширенный ASCII» не имеет официального статуса.
Для некоторых стран были разработаны 8-битные расширения ASCII, включающие поддержку символов, используемых в местных языках; например, ISCII для Индии и VISCII для Вьетнама. Компьютеры Kaypro CP/M использовали «верхние» 128 символов для греческого алфавита. [ необходима цитата ]
Даже для рынков, где не было необходимости добавлять много символов для поддержки дополнительных языков, производители ранних домашних компьютерных систем часто разрабатывали собственные 8-битные расширения ASCII для включения дополнительных символов, таких как символы рисования коробок , полуграфика и спрайты видеоигр . Часто эти дополнения также заменяли управляющие символы (индексы от 0 до 31, а также индекс 127) на еще более специфичные для платформы расширения. В других случаях дополнительный бит использовался для какой-то другой цели, например, для переключения инверсного видео ; этот подход использовался ATASCII , расширением ASCII, разработанным Atari .
Большинство расширений ASCII основаны на ASCII-1967 (текущий стандарт), но некоторые расширения основаны на более раннем ASCII-1963. Например, PETSCII , разработанный Commodore International для их 8-битных систем, основан на ASCII-1963. Аналогично, многие наборы символов Sharp MZ основаны на ASCII-1963.
IBM определила кодовую страницу 437 для IBM PC , заменив управляющие символы графическими символами, такими как смайлики , и сопоставив дополнительные графические символы с верхними 128 позициями. [62] Digital Equipment Corporation разработала набор многонациональных символов (DEC-MCS) для использования в популярном терминале VT220 как одно из первых расширений, предназначенных больше для международных языков, чем для блочной графики. Apple определила Mac OS Roman для Macintosh, а Adobe определила стандартную кодировку PostScript для PostScript ; оба набора содержали «международные» буквы, типографские символы и знаки препинания вместо графики, больше похожие на современные наборы символов.
Стандарт ISO/IEC 8859 (выведенный из DEC-MCS) предоставил стандарт, который большинство систем скопировали (или, по крайней мере, основывались на нем, когда не копировали в точности). Популярное дальнейшее расширение, разработанное Microsoft, Windows-1252 (часто ошибочно называемое ISO-8859-1 ), добавило типографские знаки препинания, необходимые для традиционной текстовой печати. ISO-8859-1, Windows-1252 и оригинальный 7-битный ASCII были наиболее распространенными методами кодирования символов во Всемирной паутине до 2008 года, когда их обогнал UTF-8 . [57]
ISO/IEC 4873 ввел 32 дополнительных управляющих кода, определенных в шестнадцатеричном диапазоне 80–9F, как часть расширения 7-битной кодировки ASCII до 8-битной системы. [63]
Unicode и универсальный набор символов ISO/IEC 10646 (UCS) имеют гораздо более широкий набор символов, и их различные формы кодирования начали быстро вытеснять ISO/IEC 8859 и ASCII во многих средах. В то время как ASCII ограничен 128 символами, Unicode и UCS поддерживают больше символов, разделяя концепции уникальной идентификации (используя натуральные числа, называемые кодовыми точками ) и кодирования (в 8-, 16- или 32-битные двоичные форматы, называемые UTF-8 , UTF-16 и UTF-32 соответственно).
ASCII был включен в набор символов Unicode (1991) как первые 128 символов, поэтому 7-битные символы ASCII имеют одинаковые числовые коды в обоих наборах. Это позволяет UTF-8 быть обратно совместимым с 7-битным ASCII, поскольку файл UTF-8, содержащий только символы ASCII, идентичен файлу ASCII, содержащему ту же последовательность символов. Еще важнее то, что обеспечивается прямая совместимость , поскольку программное обеспечение, которое распознает только 7-битные символы ASCII как специальные и не изменяет байты с наивысшим набором бит (как это часто делается для поддержки 8-битных расширений ASCII, таких как ISO-8859-1), сохранит данные UTF-8 неизменными. [64]
^@
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Кроме того, он определяет коды для 33 непечатаемых, в основном устаревших управляющих символов, которые влияют на обработку текста.
Использование функции «новой строки» (комбинированный возврат каретки и перевод строки) проще как для человека, так и для машины, чем требование обеих функций для начала новой строки; Американский национальный стандарт X3.4-1968 разрешает коду перевода строки нести значение новой строки.
Произошел переход с ASCII 1961 года на ASCII 1968 года. Некоторые компьютерные языки использовали символы в ASCII 1961 года, такие как стрелка вверх и стрелка влево. Эти символы исчезли из ASCII 1968 года. Мы работали с Фредом Мокингом, который к тому времени работал в отделе продаж в
Teletype
, над цилиндром набора, который бы скомпрометировал изменяющиеся символы, чтобы значения ASCII 1961 года не были полностью утеряны. Символ подчеркивания был сделан довольно клиновидным, чтобы он также мог служить стрелкой влево.