Управляющие символы ASCII
Управляющие символы ASCII — это группа символов (коды 0–31 и 127) в таблице кодировки ASCII (American Standard Code for Information Interchange), которые не представляют печатные знаки (буквы, цифры, знаки препинания), а предназначены для управления устройствами, форматирования текста, передачи данных и организации связи. Они также известны как непечатаемые или управляющие коды. В отличие от печатных символов, управляющие символы не отображаются на экране или бумаге, а интерпретируются оборудованием или программным обеспечением как команды.
История
Разработка управляющих символов ASCII началась в 1960-х годах в рамках работ Американской ассоциации стандартов (ASA, позднее ANSI) по созданию универсального кода для обмена информацией. Первая версия стандарта ASCII была опубликована в 1963 году. Управляющие символы были заимствованы из более ранних систем телеграфной связи, в частности кода Бодо (Baudot) и стандарта FIELDATA, где уже существовали коды для управления телетайпами и перфоленточными устройствами.
Основной целью введения управляющих символов было обеспечение совместимости между различными моделями телетайпов, принтеров и модемов. В 1965 году стандарт был пересмотрен, и в него были добавлены символы, необходимые для работы с магнитными лентами и другими запоминающими устройствами. Окончательная версия ASCII (ANSI X3.4-1968) закрепила 33 управляющих символа (коды 0–31 и 127), которые остаются неизменными до настоящего времени.
С развитием вычислительной техники в 1970–1980-х годах управляющие символы стали широко применяться в операционных системах (например, CP/M, MS-DOS, Unix) для управления терминалами и принтерами. С появлением графических интерфейсов и современных протоколов передачи данных (TCP/IP, HTTP) многие из этих символов утратили своё первоначальное значение, но сохранились в стандарте для обратной совместимости.
Классификация
Управляющие символы ASCII делятся на несколько функциональных групп в зависимости от их назначения.
Символы управления передачей данных
Эта группа включает коды, используемые для синхронизации, управления потоком и обнаружения ошибок в последовательных линиях связи. Ключевые символы:
- SOH (Start of Heading, код 1) — начало заголовка сообщения.
- STX (Start of Text, код 2) — начало текста.
- ETX (End of Text, код 3) — конец текста.
- EOT (End of Transmission, код 4) — конец передачи.
- ENQ (Enquiry, код 5) — запрос ответа от удалённого устройства.
- ACK (Acknowledge, код 6) — подтверждение приёма.
- NAK (Negative Acknowledge, код 21) — отрицательное подтверждение (ошибка приёма).
- SYN (Synchronous Idle, код 22) — синхронизация при синхронной передаче.
- ETB (End of Transmission Block, код 23) — конец блока данных.
Эти символы активно применялись в протоколах BSC (Binary Synchronous Communication) и HDLC, а также в ранних модемных соединениях.
Символы форматирования текста
Группа кодов, управляющих расположением текста на печатном устройстве или экране:
- BS (Backspace, код 8) — возврат каретки на одну позицию влево (используется для перепечатки символов).
- HT (Horizontal Tab, код 9) — горизонтальная табуляция (перевод курсора к следующей позиции табуляции).
- LF (Line Feed, код 10) — перевод строки (перемещение курсора на одну строку вниз).
- VT (Vertical Tab, код 11) — вертикальная табуляция.
- FF (Form Feed, код 12) — перевод страницы (подача бумаги на новую страницу).
- CR (Carriage Return, код 13) — возврат каретки (перемещение курсора в начало строки).
В современных системах символы LF и CR используются в комбинации (CR+LF в Windows, LF в Unix-подобных системах) для обозначения конца строки в текстовых файлах.
Символы управления устройством
Коды, предназначенные для управления периферийными устройствами (принтерами, модемами, терминалами):
- DC1–DC4 (Device Control 1–4, коды 17–20) — управляющие сигналы для включения/выключения устройств. Например, DC1 (XON) и DC3 (XOFF) в протоколе управления потоком.
- CAN (Cancel, код 24) — отмена текущей операции.
- EM (End of Medium, код 25) — конец носителя (например, конец магнитной ленты).
- SUB (Substitute, код 26) — замена ошибочного символа.
- ESC (Escape, код 27) — начало управляющей последовательности (например, ESC-последовательности ANSI для управления терминалом).
- FS, GS, RS, US (File Separator, Group Separator, Record Separator, Unit Separator, коды 28–31) — разделители данных для иерархических структур.
Прочие управляющие символы
- NUL (Null, код 0) — пустой символ, используется для заполнения пауз или как терминатор строк в языке C.
- BEL (Bell, код 7) — звуковой сигнал (звонок терминала).
- SO (Shift Out, код 14) — переключение на альтернативный набор символов.
- SI (Shift In, код 15) — возврат к основному набору символов.
- DEL (Delete, код 127) — удаление символа (изначально использовался для пробивки отверстий на перфоленте).
Устройство и представление
Управляющие символы ASCII занимают диапазон кодов от 0 до 31 (0x00–0x1F) и код 127 (0x7F). В шестнадцатеричной системе они обозначаются как 0x00–0x1F и 0x7F. В текстовых файлах управляющие символы могут быть представлены в виде escape-последовательностей (например, \n для LF, \r для CR, \t для HT) или в виде управляющих кодов с префиксом ^ (например, ^C для ETX, ^D для EOT).
В программировании управляющие символы часто используются для управления терминалом: например, последовательность \033[2J (ESC + [2J) очищает экран в ANSI-совместимых терминалах. В операционной системе Unix символ ^D (EOT) завершает ввод с клавиатуры, а ^C (ETX) прерывает выполняющуюся программу.
Применение
В системах связи
Управляющие символы исторически использовались в протоколах последовательной передачи данных (RS-232, модемы). Например, символы XON (DC1) и XOFF (DC3) управляли потоком данных, предотвращая переполнение буфера приёмника. В протоколе ASCII-кодирования для телеграфной связи символы SOH, STX, ETX и EOT обрамляли сообщения.
В текстовых файлах и операционных системах
Символы LF, CR и HT являются основой форматирования текста. В Unix-подобных системах конец строки обозначается одним символом LF (код 10), в Windows — последовательностью CR+LF (коды 13 и 10), в классической Mac OS — только CR. Символ TAB (HT) используется для выравнивания данных в таблицах.
В программировании
Управляющие символы широко применяются в языках программирования:
\0(NUL) — терминатор строки в C и C++.\n(LF) — перевод строки.\r(CR) — возврат каретки.\t(HT) — табуляция.\b(BS) — возврат на одну позицию (например, для анимации в консоли).
В языке Python управляющие символы могут быть вставлены в строку с помощью escape-последовательностей, а в Bash — с помощью $'\n' или echo -e.
В протоколах и форматах данных
Некоторые управляющие символы используются в сетевых протоколах:
- NUL — заполнитель в протоколе HTTP (например, в заголовках).
- ESC — начало управляющей последовательности в протоколах ANSI-терминалов (например, для изменения цвета текста).
- SUB — символ замены в старых протоколах передачи файлов (XMODEM, YMODEM).
Примеры использования
- В текстовом редакторе
vi(Unix) символ^D(EOT) используется для прокрутки экрана вниз. - В протоколе Telnet символ
^](ESC) открывает командный режим. - В языке ассемблера x86 символ
0x00(NUL) часто используется как терминатор строки. - В системах электронной почты символы CR и LF разделяют заголовки и тело письма (RFC 2822).
Интересные факты
- Символ DEL (код 127) изначально был задуман для удаления символа на перфоленте: все семь битов устанавливались в 1, что позволяло «забить» отверстие, сделав его нечитаемым.
- В ранних версиях ASCII (1963) символы SO и SI использовались для переключения между латинским и кириллическим алфавитами, но позже были заменены на отдельные кодировки (например, KOI8).
- Символ BEL (код 7) до сих пор поддерживается в современных терминалах и может вызывать звуковой сигнал системы.
- Управляющие символы ASCII стали основой для более поздних стандартов, таких как Unicode, где они сохранены в первых 128 кодовых позициях (U+0000–U+007F).
Критика и устаревание
С развитием графических интерфейсов и высокоуровневых протоколов многие управляющие символы ASCII утратили практическое значение. Например, символы FS, GS, RS, US редко используются в современных системах, а их функции заменены структурами данных (XML, JSON). Управление потоком (XON/XOFF) вытеснено аппаратными методами (RTS/CTS) в современных последовательных интерфейсах (USB, Ethernet). Тем не менее, символы LF, CR, HT, NUL и ESC остаются критически важными для совместимости с устаревшими системами и текстовыми форматами.
Источники
- ANSI X3.4-1968: American Standard Code for Information Interchange.
- RFC 20: ASCII format for network interchange (1969).
- Mackenzie, C. E. (1980). Coded Character Sets: History and Development. Addison-Wesley.
- ISO/IEC 646:1991 — Information technology — ISO 7-bit coded character set for information interchange.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →