Открыть сервисСервис

ASCII кодирование

ASCII (American Standard Code for Information Interchange, американский стандартный код для обмена информацией) — одна из первых и наиболее распространённых систем кодирования символов в цифровых устройствах, предназначенная для представления текстовой информации с помощью 7-битных или 8-битных комбинаций двоичного кода. ASCII позволяет кодировать 128 (в 7-битной версии) или 256 (в расширенной 8-битной) символов, включая прописные и строчные латинские буквы, цифры, знаки препинания, управляющие символы и ряд дополнительных символов.

История

Разработка и утверждение

ASCII был разработан в 1963 году Американским национальным институтом стандартов (ANSI) на основе предшествующих телеграфных кодов (например, кода Бодо и FIELDATA). Целью создания было обеспечить универсальную совместимость между различными моделями компьютеров и телетайпов, производимых разными компаниями. Первоначально был принят 7-битный код, позволяющий закодировать 128 символов. В 1967 году стандарт был доработан, а в 1968 году опубликован под обозначением ANSI X3.4-1968. В 1970-х годах ASCII стал широко внедряться в операционных системах Unix, терминалах и персональных компьютерах.

Распространение и конкуренты

До появления ASCII существовало множество несовместимых кодировок, таких как EBCDIC (IBM), которые использовали 8-битные символы, но с разными кодовыми таблицами. Успех ASCII объяснялся его простотой, открытостью и универсальностью. Однако изначальный стандарт не включал символы национальных алфавитов (русского, греческого, арабского и т.д.), что привело к появлению расширенного ASCII — 8-битных надстроек (например, CP866, Windows-1251 для кириллицы). К началу 1990-х годов ASCII стал основой для большинства компьютерных систем, а его 7-битная часть была заимствована в последующие стандарты (например, ISO/IEC 8859, Unicode).

Структура и кодирование

7-битная таблица ASCII

В 7-битном представлении каждый символ кодируется семью битами, что даёт 2^7 = 128 возможных кодовых значений от 0 до 127. Таблица делится на две части:

  • Управляющие символы (коды 0–31 и 127): не печатаются, используются для управления устройствами (например, перевод строки LF — 10, возврат каретки CR — 13, табуляция TAB — 9, звонок BEL — 7). Код 127 — DEL (удаление).
  • Печатные символы (коды 32–126): включают пробел (32), цифры 0–9 (48–57), заглавные латинские буквы A–Z (65–90), строчные a–z (97–122), знаки препинания, скобки, математические операторы (например, +, -, *, /) и другие типографские символы.

Пример кодирования

  • Символ A (латинская заглавная) имеет код 65₁₀, или в двоичном виде 1000001₂ (7 бит).
  • Символ 1 (цифра) — код 49₁₀ = 0110001₂.
  • Символ пробел — код 32₁₀ = 0100000₂.

Расширенный ASCII (8-битный)

Для кодирования дополнительных символов (например, букв кириллицы, немецких умлаутов, псевдографики) стали использовать 8-битные кодировки, где старший бит (128–255) отведён под национальные символы. Примеры:

  • Windows-1251 (для кириллицы): А (заглавная) — код 192₁₀.
  • CP866 (альтернативная кодировка для DOS): А — код 128₁₀.
  • ISO 8859-1 (латиница, западноевропейские языки): Ñ — код 209₁₀.

При чтении текста, созданного в одной 8-битной кодировке, на устройстве с другой кодировкой символы отображаются некорректно («кракозябры»). Эта проблема решена введением Unicode.

Классификация символов

Управляющие символы (коды 0–31, 127)

  • 0 (NUL) — нулевой символ, используется для заполнения или завершения строк.
  • 7 (BEL) — звуковой сигнал.
  • 8 (BS) — шаг назад.
  • 9 (HT) — горизонтальная табуляция.
  • 10 (LF) — перевод строки.
  • 13 (CR) — возврат каретки.
  • 27 (ESC) — escape-символ, начало управляющей последовательности.
  • 127 (DEL) — удаление символа.

Печатные символы (коды 32–126)

  • 32: пробел.
  • 33–47: знаки препинания и символы (! " # $ % & ' ( ) * + , - . /).
  • 48–57: цифры 0–9.
  • 58–64: разделители ( : ; < = > ? @ ).
  • 65–90: заглавные латинские буквы A–Z.
  • 91–96: квадратные скобки, обратный слеш, ^, _, `.
  • 97–122: строчные латинские буквы a–z.
  • 123–126: фигурные скобки, вертикальная черта, тильда.

Применение

Текстовые протоколы и интерфейсы

ASCII лёг в основу многих сетевых протоколов: HTTP, SMTP, FTP (команды передаются в виде ASCII-строк). Терминалы и эмуляторы терминала (VT100, xterm) использовали ASCII для передачи управляющих последовательностей (escape-последовательности). Даже в современных системах ASCII остаётся базовым форматом для конфигурационных файлов (.ini, .conf), скриптов (bash, Python), исходного кода (C, Java) и электронной почты (заголовки писем).

ASCII-арт

На основе печатных символов ASCII сложилась традиция создания графических изображений — «ASCII-арта». Изображения составляются из букв, цифр, знаков препинания и пробелов, отображаемых моноширинным шрифтом. Этот жанр был популярен в период BBS и раннего интернета, а также в качестве подписей в электронных письмах (например, смайлик :-) ).

Кодирование обмена данными

ASCII используется в форматах данных, где требуется человекочитаемость: JSON (содержит управляющие символы и печатные символы), XML, YAML. В системах управления версиями (Git) строки в файлах сравниваются как ASCII-последовательности, если не указана другая кодировка.

Управление устройствами

Управляющие символы ASCII применяются в принтерах, терминалах, телетайпах и модемах. Например, последовательность CR+LF (0x0D 0x0A) используется для перехода на новую строку в текстовых файлах Windows (в Unix только LF).

Значение и критика

Достоинства

  • Простота и низкая избыточность (7 бит на символ).
  • Универсальность: ASCII читается всеми современными компьютерами.
  • Основа для большинства текстовых форматов.
  • Наследие: все стандарты Unicode сохраняют первые 128 символов в точности как в ASCII.

Недостатки

  • Ограниченный набор символов: отсутствуют буквы многих языков (кириллица, греческий, иероглифы).
  • Отсутствие поддержки международных алфавитов потребовало создания десятков 8-битных кодировок, что привело к путанице.
  • Смешение управляющих символов с функциями управления в разных операционных системах (например, разные символы конца строки: CR+LF в Windows, LF в Linux/Unix, CR в старых Mac).

Влияние на Unicode

С появлением Unicode (1990-е) проблема несовместимости кодировок была решена путём включения всех символов мира в единую таблицу, где первые 128 кодов полностью совпадают с ASCII. UTF-8 — наиболее распространённая реализация Unicode — сохраняет обратную совместимость с ASCII: любой ASCII-файл является корректным UTF-8-файлом. Таким образом, ASCII продолжает существовать как подмножество Unicode.

Интересные факты

  • Код 32 (пробел) является печатным, но при этом не отображает видимого знака. Он считается символом, а не управляющим.
  • ASCII-символ \t (табуляция) используется для выравнивания текста в колонках; её ширина зависит от настроек терминала.
  • В ранних системах ASCII-символы могли передаваться с инверсным битом чётности для обнаружения ошибок; это приводило к неоднозначности при отображении 8-битных расширений.
  • Электронная почта до внедрения MIME могла содержать только ASCII-символы (7-битный транспорт), что вынуждало кодировать вложения (Base64, quoted-printable).

Источники

  • ANSI X3.4-1968 (American National Standard Code for Information Interchange)
  • ISO/IEC 646 (международный стандарт, идентичный ASCII для латинских символов)
  • RFC 20 (сетевой стандарт ASCII, 1969)
  • Книга: "The Standard Data Encryption Algorithm" (описание кодирования ASCII)
  • Материалы по истории вычислительной техники: Charles E. Mackenzie, "Coded Character Sets: History and Development" (1980)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru