Кодировка ASCII
ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией) — это таблица кодировки символов, предназначенная для представления текстовой информации в цифровых устройствах. ASCII является семибитной кодировкой, то есть каждый символ в ней кодируется последовательностью из 7 бит, что позволяет закодировать 128 различных символов (от 0 до 127). Стандарт был разработан в 1963 году и стал основой для большинства современных компьютерных кодировок.
История
Предпосылки создания
До появления ASCII существовало множество несовместимых друг с другом кодировок, используемых в телеграфии и ранних вычислительных машинах. Разные производители (IBM, Univac, Burroughs) применяли собственные системы кодирования, что затрудняло обмен данными между устройствами. В 1960 году Американская ассоциация стандартов (ASA, ныне ANSI) приступила к разработке универсального стандарта.
Разработка и принятие
Работу возглавил Роберт Бернер, сотрудник компании IBM. Первая версия стандарта была опубликована в 1963 году под названием ASA X3.4-1963. В 1967 году вышла обновлённая версия (ASA X3.4-1967), в которую были внесены существенные изменения: строчные буквы были отделены от прописных, а управляющие символы были перераспределены. Окончательная версия, ставшая международным стандартом, была утверждена в 1968 году как ANSI X3.4-1968. Впоследствии ASCII был принят Международной организацией по стандартизации (ISO) как ISO 646 (с некоторыми национальными вариантами).
Распространение
В 1970-х — 1980-х годах ASCII стал де-факто стандартом для персональных компьютеров, телетайпов и терминалов. Операционные системы CP/M, MS-DOS, Unix и ранние версии Windows использовали ASCII (или его расширения) для представления текста. С появлением более мощных компьютеров и необходимости поддержки языков, отличных от английского, ASCII был расширен до 8-битных кодировок (например, Windows-1251, KOI-8), а затем вытеснен Unicode, который, однако, сохранил первые 128 кодов ASCII в качестве своей основы.
Структура и таблица символов
ASCII состоит из 128 кодов, которые делятся на две основные группы:
Управляющие символы (коды 0–31 и 127)
Эти символы не отображаются на экране и не печатаются, а предназначены для управления устройствами (терминалами, принтерами, линиями связи). К ним относятся:
- NUL (0) — нулевой символ, используется как заполнитель или терминатор строки в некоторых языках программирования (например, в C).
- BEL (7) — звонок (bell), вызывает звуковой сигнал на терминале.
- BS (8) — возврат на шаг (backspace), перемещает курсор на одну позицию влево.
- TAB (9) — горизонтальная табуляция.
- LF (10) — перевод строки (line feed), сдвигает курсор на следующую строку.
- CR (13) — возврат каретки (carriage return), перемещает курсор в начало строки.
- ESC (27) — escape, используется для ввода управляющих последовательностей.
- DEL (127) — удаление (delete), в некоторых системах стирает символ слева от курсора.
Печатные символы (коды 32–126)
Это видимые символы: буквы, цифры, знаки препинания и специальные знаки.
| Код (дес.) | Символ | Описание | |
|---|---|---|---|
| 32 | Пробел | Непечатный символ, разделяющий слова | |
| 33–47 | ! " # $ % & ' ( ) * + , - . / | Знаки пунктуации и математические символы | |
| 48–57 | 0–9 | Арабские цифры | |
| 58–64 | : ; < = > ? @ | Знаки препинания и символ @ (коммерческое at) | |
| 65–90 | A–Z | Прописные латинские буквы | |
| 91–96 | [ \ ] ^ _ ` | Скобки и специальные символы | |
| 97–122 | a–z | Строчные латинские буквы | |
| 123–126 | { \ | } ~ | Фигурные скобки и тильда |
Важной особенностью ASCII является то, что коды прописных и строчных букв различаются ровно на 32 (например, 'A' = 65, 'a' = 97). Это упрощает преобразование регистра: достаточно изменить шестой бит (добавить или вычесть 32).
Расширения ASCII
Поскольку 7-битный ASCII мог кодировать только 128 символов, что было недостаточно для языков, использующих кириллицу, диакритические знаки или иероглифы, были разработаны 8-битные расширения. Они использовали коды 128–255 для дополнительных символов. Наиболее известные расширения:
- ISO 8859-1 (Latin-1) — для западноевропейских языков.
- Windows-1251 — для кириллицы (русский, украинский, белорусский и др.).
- KOI8-R — альтернативная кириллическая кодировка, популярная в Unix-системах и Рунете в 1990-х годах.
- CP437 — оригинальная кодировка IBM PC, содержащая символы псевдографики.
Все эти кодировки сохраняли первые 128 символов (0–127) неизменными, что обеспечивало обратную совместимость с ASCII.
Применение
В компьютерных системах
ASCII широко использовался в:
- Терминалах и телетайпах (например, Teletype Model 33) для передачи текста по последовательным линиям связи.
- Файловых системах — текстовые файлы в кодировке ASCII (plain text) являются базовым форматом для хранения исходного кода, конфигураций и документации.
- Сетевых протоколах — многие протоколы (HTTP, SMTP, FTP, Telnet) используют ASCII для передачи команд и заголовков. Например, HTTP-запросы и ответы — это текст в ASCII.
- Языках программирования — исходный код на языках C, C++, Java, Python и других традиционно записывается в ASCII (или его расширениях).
В электронной почте
Протокол SMTP изначально был рассчитан только на передачу 7-битного ASCII. Для отправки вложений (изображений, архивов) были разработаны методы кодирования двоичных данных в ASCII, такие как Base64 и quoted-printable.
В современных системах
Хотя Unicode (UTF-8) стал доминирующей кодировкой, ASCII остаётся важным:
- UTF-8 полностью совместим с ASCII: первые 128 кодов UTF-8 совпадают с ASCII. Любой ASCII-текст является корректным UTF-8.
- Управляющие символы ASCII используются в современных протоколах (например, символы LF и CR в HTTP-заголовках).
- Встраиваемые системы и микроконтроллеры часто используют ASCII для вывода отладочной информации через последовательный порт.
Критика и ограничения
Основным недостатком ASCII является его ограниченность: он поддерживает только латинский алфавит и английский язык. Для других языков (русского, арабского, китайского) требуются расширения или полная замена кодировки. Кроме того, ASCII не поддерживает математические символы (например, греческие буквы, интегралы) и символы других письменностей.
Ещё одним ограничением является то, что ASCII не различает национальные валюты: символ доллара ($) есть, а знаков рубля, евро или фунта стерлингов в оригинальном стандарте не предусмотрено.
Интересные факты
- Символ @ (коммерческое at) с кодом 64 был включён в ASCII не для электронной почты (она появилась позже), а как коммерческий символ «по цене за штуку» (от англ. at the rate of).
- В ранних версиях ASCII строчные буквы отсутствовали — они были добавлены только в версии 1967 года.
- Код 127 (DEL) изначально предназначался для перфолент: он позволял пробить все отверстия в позиции, «затирая» любой ранее записанный символ.
- ASCII является основой для многих стандартов, включая Unicode, который расширяет его до 1 114 112 возможных кодовых позиций.
Источники
- ANSI X3.4-1968: American Standard Code for Information Interchange
- ISO 646: Information processing — ISO 7-bit coded character set for information interchange
- Mackenzie, Charles E. (1980). Coded Character Sets: History and Development. Addison-Wesley.
- RFC 20: ASCII format for network interchange (1969)
- История развития кодировок текста — материалы Computer History Museum
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →