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

Escape-последовательности

Escape-последовательность (управляющая последовательность, escape-символ, escape-код) — это комбинация символов в строке или тексте, которая интерпретируется компьютерной программой не как обычный текст, а как команда для выполнения специального действия или для представления символа, который невозможно ввести напрямую (например, управляющие символы, непечатаемые знаки или символы с особым значением в данном контексте). Escape-последовательности широко используются в языках программирования, командных оболочках, текстовых процессорах и протоколах передачи данных.

История

Идея escape-последовательностей восходит к ранним дням телетайпов и терминалов. В 1960-х годах, с развитием стандарта ASCII (American Standard Code for Information Interchange), были введены управляющие символы, такие как Escape (ESC, код 27 в десятичной системе). Этот символ сам по себе не отображался, а служил префиксом для последующих кодов, формируя так называемые escape-последовательности. Например, в терминалах DEC VT100 (1978 год) последовательность ESC [ H использовалась для перемещения курсора в домашнюю позицию.

В языках программирования escape-последовательности стали стандартом с появлением языка C (1972 год), где они были введены для представления непечатаемых символов в строковых литералах. Например, \n для перевода строки и \t для табуляции. Этот подход был унаследован многими последующими языками, включая C++, Java, Python, JavaScript и PHP.

С развитием веб-технологий escape-последовательности нашли применение в HTML и URL. В HTML для отображения символов, имеющих специальное значение (например, <, >, &), используются так называемые HTML-сущности (entity references), которые также можно рассматривать как вид escape-последовательностей. В URL для кодирования недопустимых символов применяется процентное кодирование (percent-encoding), например, пробел кодируется как %20.

Классификация

Escape-последовательности можно классифицировать по контексту использования и типу кодируемых данных.

По контексту использования

  1. Языки программирования. Используются в строковых и символьных литералах для представления управляющих символов (перевод строки, табуляция) и специальных символов (кавычки, обратная косая черта). Примеры: \n, \t, \", \\.
  2. Командные оболочки (shell). В Unix-подобных системах (bash, zsh) и в Windows (cmd, PowerShell) escape-последовательности используются для интерпретации специальных символов, таких как пробелы, подстановочные знаки (*, ?) и переменные ($). Например, в bash пробел в имени файла экранируется обратной косой чертой: cd Мои\ Документы.
  3. Терминалы и текстовые консоли. Последовательности, начинающиеся с символа Escape (ESC), управляют отображением текста: цветом, положением курсора, очисткой экрана. Пример: ESC[31m устанавливает красный цвет текста.
  4. Форматы данных и протоколы. В JSON, XML, HTML и URL escape-последовательности обеспечивают корректную передачу и отображение данных. Примеры: \" в JSON, &lt; в HTML, %20 в URL.
  5. Регулярные выражения. В регулярных выражениях escape-последовательности позволяют интерпретировать метасимволы (например, ., *, +) как обычные символы. Пример: \. соответствует точке, а не любому символу.

По типу кодируемых символов

  1. Управляющие символы. Представляют непечатаемые команды, такие как перевод строки (\n, LF), возврат каретки (\r, CR), табуляция (\t, HT), звуковой сигнал (\a, BEL).
  2. Специальные символы. Позволяют вставить символы, которые имеют особое значение в синтаксисе языка или формата. Например, обратная косая черта (\\), двойные кавычки (\"), одинарные кавычки (\').
  3. Символы по коду. Позволяют вставить любой символ по его числовому коду в определённой кодировке. Примеры: \x41 (шестнадцатеричный код символа 'A' в ASCII), \u0041 (Unicode-код символа 'A' в шестнадцатеричном формате), \101 (восьмеричный код символа 'A').

Устройство и синтаксис

Синтаксис escape-последовательностей различается в зависимости от контекста, но общий принцип заключается в использовании префикса, который сигнализирует о том, что последующие символы должны интерпретироваться особым образом.

В языках программирования (на примере C и подобных)

В большинстве языков семейства C (C, C++, Java, C#, JavaScript, Python, PHP) escape-последовательности начинаются с обратной косой черты (\). После неё следует один или несколько символов, определяющих конкретное действие.

ПоследовательностьЗначение (ASCII)Описание
\nLF (Line Feed)Перевод строки (новая строка)
\rCR (Carriage Return)Возврат каретки
\tHT (Horizontal Tab)Горизонтальная табуляция
\vVT (Vertical Tab)Вертикальная табуляция
\aBEL (Bell)Звуковой сигнал
\bBS (Backspace)Возврат на один символ (забой)
\fFF (Form Feed)Перевод страницы (прогон листа)
\\\Обратная косая черта
\''Одинарная кавычка
\""Двойная кавычка
\0NULНулевой символ (конец строки в C)
\xNNСимвол с шестнадцатеричным кодом NN
\uNNNNСимвол Unicode с 16-битным кодом NNNN
\UNNNNNNNNСимвол Unicode с 32-битным кодом NNNNNNNN

В командных оболочках Unix

В оболочках (bash, sh) escape-символом по умолчанию является обратная косая черта (\). Она отменяет специальное значение следующего за ней символа. Например:

Также для экранирования групп символов используются одинарные кавычки ('...'), которые отключают интерпретацию всех специальных символов внутри, и двойные кавычки ("..."), которые отключают большинство специальных символов, но оставляют активными подстановку переменных ($), обратные кавычки и некоторые другие.

В терминалах (ANSI escape-коды)

ANSI escape-коды (или escape-последовательности ANSI) — это стандарт для управления терминалами. Они начинаются с символа ESC (код 27, \e или \033 в языках программирования) и открывающей квадратной скобки [. Формат: ESC [ <параметры> <команда>. Например:

В URL (процентное кодирование)

В URL-адресах escape-последовательности представлены знаком процента (%), за которым следуют две шестнадцатеричные цифры, обозначающие код символа в ASCII. Например:

Это необходимо, поскольку URL могут содержать только ограниченный набор символов.

Применение

Escape-последовательности являются фундаментальным инструментом в программировании и обработке данных, обеспечивая корректную работу с текстом и управление устройствами вывода.

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

Источники

  1. Керниган Б., Ритчи Д. «Язык программирования C». 2-е издание. — М.: Вильямс, 2009.
  2. Стандарт ECMA-48 «Control Functions for Coded Character Sets».
  3. Документация GNU Bash Manual.
  4. RFC 3986 «Uniform Resource Identifier (URI): Generic Syntax».
  5. Спецификация языка Python 3: «Lexical analysis — String and Bytes literals».
  6. Википедия: «ANSI escape code».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →