ASCII (англ. American Standard Code for Information Interchange) — стандарт кодирования букв латинского алфавита, цифр, знаков препинания, некоторых специальных знаков и управляющих символов, принятый в 1963 году Американской ассоциацией стандартов как основной способ представления текстовых данных для хранения и обработки в компьютере.
Во избежание путаницы с национальными вариантами кодировок ASCII, используемыми в других странах, IANA рекомендует обозначать оригинальный вариант кода, использующий исключительно английский язык как US-ASCI.
Стандарт ASCII представляет собой 7-битный код без рекомендаций относительно контроля чётности, содержащий 27 = 128 кодовых позиций, в которых размещены следующие символы:
- десятичные цифры;
- латинские буквы;
- знаки препинания;
- орфографические знаки;
- диакритические знаки;
- математические символы;
- управляющие символы.
Работа по созданию ASCII началась 6 октября 1960 года, и 17 июня 1963 года, почти 3 года спустя, была опубликована его первая редакция (ASA X3.4—1963). В ней отсутствовали строчные буквы, а область из 28 кодовых позиций 0x60—0x7B была зарезервирована для дальнейшего использования. Велись споры о том, как использовать эту область — для добавления строчных букв или же управляющих символов.
В 1965 году была подготовлена новая редакция ASCII (ASA X3.4—1965), которая, однако, так и не была опубликована и не использовалась нигде, кроме терминалов IBM 2260/2848 и принтеров IBM 1053 (да и то без строчных букв и некоторых других символов). Следующая редакция ASCII (USAS X3.4—1967) была опубликована 5 июля 1967 года и определила окончательную кодовую таблицу. Новые редакции ASCII продолжили выходить и далее (USAS X3.4—1968, ANSI X3.4—1977, ANSI X3.4—1986 и т. д.), однако кодовую таблицу изменения в них более не затрагивали.
В целом, внедрение ASCII очень долгое время саботировалось компанией IBM, отдававшей предпочтение собственной кодировке EBCDIC, применявшейся, в частности в ЭВМ серий IBM S/390 и IBM As400, являющейся дальнейшим развитием кодировки BCDIC, также созданной IBM и основанной, в свою очередь, на коде Холлерита.
Возможность адаптации ASCII под нужды других стран предусмотрена сразу в трёх тесно взаимосвязанных стандартах — ISO 646 Международной организации по стандартизации (ныне — ISO/IEC 646), ECMA-6 Европейской ассоциации производителей компьютеров и рекомендации V.3 (Международный алфавит № 5) Международного консультативного комитета по телеграфии и телефонии (ныне — рекомендация T.50 (Международный справочный алфавит) Сектора стандартизации электросвязи МСЭ). Для этого предлагается заменять символы @
, [
, \
, ]
, ^
, `
, {
, |
, }
и ~
на национальные. Также допускается замена знака решётки (#
) на знак фунта (£
), а знака доллара ($
) — на знак валюты (¤
). Унифицированный вариант кода, не содержащий национальные символы, при этом обозначается как IRV (сокр. от англ. international reference version — «международная ссылочная версия»). ISO 646 IRV был утверждён в Советском Союзе как КОИ-7 Н0 в ГОСТ 13052 (ныне — ГОСТ 27463).
Для некоторых языков с нелатинской письменностью (русского, греческого, арабского, и др.) существовали и более радикальные модификации ASCII:
- в одних на месте строчных латинских букв размещались национальные символы (для русского (КОИ-7 Н2) и греческого вариантов — заглавные буквы);
- в других предусматривалось переключение между ASCII (ISO 646 IRV) и национальным вариантом кода «на лету» с помощью символов SO и SI; в этом случае в национальном варианте можно было полностью заменить латинские буквы на национальные символы (как, например, в КОИ-7 Н1).
Со временем стали появляться производные 8-битные кодировки (кодовые страницы), содержащие 28 = 256 кодовых позиций, в которых нижняя половина кодовой таблицы (позиции 0x00—0x7F), как правило, полностью совпадает с ASCII, а верхняя (позиции 0x80—0xFF) служит для размещения дополнительных, в том числе национальных, символов. Подобные ASCII-совместимые кодировки, получившие неофициальное собирательное название «расширенный ASCII», оказались удобнее упомянутых ранее 7-битных вариантов и широко использовались вплоть до начала повсеместного внедрения Unicode. Впрочем, отсутствие единого подхода к размещению национальных символов в их кодовых таблицах (например, кириллицы в ISO/IEC 8859-5, KOI8-R, Windows-1251 и т. д.) порождало множество проблем. Так, например, когда почтовые клиенты отправителя и получателя использовали различные кодировки для интерпретации текста письма, тот (за исключением символов ASCII) становился нечитаемым (превращался в так называемые кракозябры).