В информатике управляющая последовательность — это комбинация символов , которая имеет значение, отличное от содержащихся в ней буквальных символов; [1] она отмечена одним или несколькими предшествующими (и, возможно, завершающими) символами. [2]
\
. [3]\\
можно использовать , при этом первая обратная косая черта указывает на экранирование, а вторая указывает на то, что обратная косая черта экранируется. [5]\x5c
( шестнадцатеричная ) \\
, и \134
( восьмеричная ) кодируют один и тот же символ: обратную косую черту \
.[
(десятичный код символа 91), определяет escape-последовательность.При указании эта серия символов используется для изменения состояния компьютеров и подключенных к ним периферийных устройств , а не для отображения или печати, как это делают обычные байты данных . Они также известны как управляющие последовательности , что отражает их использование в управлении устройствами, начиная с инициатора управляющей последовательности — изначально «символа экранирования» кода ASCII — символа 27 (десятичного) — часто обозначаемого как «Esc» на клавишных колпачках .
С появлением терминалов ANSI большинство управляющих последовательностей начинались с двух символов «ESC», а затем «[» или специально выделенного символа CSI с кодом 155 (десятичный).
Не все управляющие последовательности использовали экранированный символ, например:
Escape-последовательности в коммуникациях обычно используются, когда компьютер и периферийное устройство имеют только один канал для передачи информации туда и обратно (поэтому escape-последовательности являются примером внутриполосной сигнализации ). [11] [12] Они были распространены, когда большинство немых терминалов использовали ASCII с 7 битами данных для связи, и иногда использовались для переключения на другой набор символов для «чужих» или графических символов, которые в противном случае были бы ограничены 128 кодами, доступными в 7 битах данных. Даже относительно «немые» терминалы реагировали на некоторые escape-последовательности, включая оригинальные механические принтеры Teletype (на которых были основаны «стеклянные телетайпы» или VDU) реагировали на символы 27 и 31 для переключения между режимами букв и цифр.
Escape-символ обычно назначается клавише Esc на клавиатуре компьютера и может быть отправлен другими способами, нежели как часть escape-последовательности. Например, клавиша Esc может использоваться как входной символ в таких редакторах, как vi , [13] или для возврата на один уровень в меню в некоторых приложениях. [14] Терминалы Hewlett Packard HP 2640 имели клавишу для режима «функций отображения», которая отображала графику для всех управляющих символов, включая Esc, для помощи в отладке приложений.
Если предполагается, что клавиша Esc и другие клавиши, отправляющие escape-последовательности, обе имеют смысл для приложения, возникает неоднозначность, если используется символьный терминал . Когда приложение получает escape-символ ASCII , неясно, является ли этот символ результатом нажатия пользователем клавиши Esc или это начальный символ escape-последовательности (например, в результате нажатия клавиши со стрелкой). Традиционный метод разрешения неоднозначности заключается в наблюдении за тем, следует ли быстро за escape-символом другой символ. Если нет, то предполагается, что он не является частью escape-последовательности. Эта эвристика может дать сбой при некоторых обстоятельствах, особенно без высоких современных скоростей связи.
Последовательности управления восходят по крайней мере к коду Бодо 1874 года . [15] [16] [17]
Например, набор команд Hayes определяет одну escape-последовательность, +++ . ( Чтобы интерпретировать +++ , которая может быть частью данных, как escape-последовательность, отправитель останавливает связь на одну секунду до и после +++ .) Когда модем встречает это в потоке данных, он переключается из своего обычного режима работы, который просто отправляет любые символы на телефон, в командный режим, в котором следующие данные предполагаются частью командного языка. Вы можете переключиться обратно в онлайн-режим , отправив команду O.
Набор команд Hayes является модальным , переключаясь из командного режима в онлайн-режим. [18] [19] Это не подходит в случае, когда команды и данные будут быстро переключаться вперед и назад. Примером немодального языка управления escape-последовательностями является VT100 , который использовал серию команд, предваряемых Control Sequence Introducer .
Управляющий символ — это символ, который в отдельности имеет некоторую функцию управления, например возврат каретки (CR). Escape-последовательности, напротив, состоят из одного или нескольких escape-символов , которые изменяют интерпретацию последующих символов.
Терминал VT52 использовал простые команды диграфа , такие как escape-A: изолированно «A» просто означало букву «A», но как часть последовательности escape «escape-A» она имела другое значение. VT52 также поддерживал параметры: это был не простой язык управления, закодированный как подстановка.
Более поздний терминал VT100 реализовал более сложный стандарт escape-последовательностей ANSI (теперь ECMA-48) для таких функций, как управление перемещением курсора, набор символов и улучшения отображения. Серия Hewlett Packard HP 2640 имела, возможно, самые сложные escape-последовательности для блочных и символьных режимов, программных клавиш и их программных меток, графических векторов и даже сохранения данных на ленту или дисковые файлы.
Утилиту ANSI.SYS [20] можно использовать для включения интерпретации управляющих последовательностей терминала ANSI (ECMA-48) в DOS (используя $e
в команде PROMPT ) или в окнах команд в 16-разрядной Windows . Рост числа приложений с графическим интерфейсом , которые напрямую записывают данные на видеокарты, значительно сократил использование управляющих последовательностей на платформах Microsoft, но их по-прежнему можно использовать для создания интерактивных экранных интерфейсов с произвольным доступом на основе символов с помощью библиотечных процедур на основе символов, таких как printf, без использования программы с графическим интерфейсом.
Текстовый терминал по умолчанию и текстовые окна (например, использующие xterm ) реагируют на escape-последовательности ANSI.
Когда в строке, заключенной в кавычки/экранирование, требуется экранирующий символ , в языках программирования и скриптов используются две стратегии:
'He didn''t do it.'
, ) [21]Примером последнего является использование каретки ( ^
). Например, это выводит «Вы можете сделать это с помощью Cut&Paste» в CMD . (в противном случае амперсанд имеет ограниченное использование) [22]
echo Вы можете сделать это с помощью Cut^&Paste
Распространенное использование escape-последовательностей на самом деле заключается в удалении управляющих символов, обнаруженных в двоичном потоке данных, чтобы они не вызывали их управляющую функцию по ошибке. В этом случае управляющий символ заменяется определенным "escape-символом" (который не обязательно должен быть escape-символом US-ASCII) и одним или несколькими другими символами; после выхода из контекста, где управляющий символ мог бы вызвать действие, последовательность распознается и заменяется удаленным символом. [22] Для передачи самого "escape-символа" отправляются две копии. [21]
Во многих языках программирования и интерфейсах командной строки escape-последовательности используются в символьных и строковых литералах для выражения символов, которые не печатаются или конфликтуют с синтаксисом символов или строк. Например, сами управляющие символы могут быть не допущены к размещению в программе, закодированной программой-редактором, или могут иметь нежелательные побочные эффекты при вводе в команду. Символ конца кавычки также является проблемой для программистов, которую можно решить, экранировав его. В большинстве контекстов escape-символом является обратная косая черта (" \ ").
Например, символ одинарной кавычки может быть выражен как , '\''
поскольку написание '''
недопустимо.
Во многих современных языках программирования символ двойной кавычки ( "
) указывается как разделитель для строкового литерала. Символ экранирования обратной косой черты обычно предоставляет способы включения двойных кавычек в строковый литерал, например, путем изменения значения символа двойной кавычки, встроенного в строку ( \"
), или путем изменения значения последовательности символов, включая шестнадцатеричное значение символа двойной кавычки ( \x22
). Обе последовательности кодируют литеральную двойную кавычку ( "
).
На Perl или Python 2
print "Нэнси сказала толпе : " Привет, мир ! "
выдает синтаксическую ошибку, тогда как:
print "Нэнси сказала \"Привет, мир!\" толпе." ; ### пример \"
производит предполагаемый вывод. Другая альтернатива:
print "Нэнси сказала \x22Привет, мир!\x22 толпе." ; ### пример \x22
использует «\x» для указания того, что следующие два символа являются шестнадцатеричными цифрами, где «22» — это значение ASCII для двойной кавычки в шестнадцатеричном формате.
C , C++ , Java и Ruby допускают абсолютно одинаковые два стиля экранирования с обратной косой чертой. Язык PostScript и Microsoft Rich Text Format также используют экранирование с обратной косой чертой. Кодировка quote-printable использует знак равенства в качестве экранирующего символа.
URL и URI используют процентное кодирование для заключения в кавычки символов со специальным значением, как и для символов, не входящих в набор ASCII.
Еще один похожий (и частично совпадающий) синтаксический прием — это подстройка .
Некоторые языки программирования также предоставляют другие способы представления специальных символов в литералах, не требующие экранирующего символа (см., например, столкновение разделителей ).
Комбинации символов, состоящие из обратной косой черты,
за которой следует буква или комбинация цифр, называются
escape-последовательностями
.
\
5.1.1.2 Фазы перевода, 2.: Каждый экземпляр символа обратной косой черты (
), за которым сразу следует символ новой строки, удаляется, объединяя физические исходные строки в логические исходные строки. [...]
\
Команды vi […] Нажатие клавиши Esc (Escape) позволяет вам […]
Код Бодо, изобретенный в 1870 году и запатентованный в 1874 году Ж. Бодо, […]
элементы C0 и C1 управляющих символов […] 5-битный код, запатентованный Жаном-Морисом-Эмилем Бодо (1845-1903) в 1874 году
+++ - "Escape Sequence" - Эта команда инициирует escape-последовательность для возврата модема в режим команд в режиме онлайн.
Когда модем находится в командном режиме, он может принимать от вас команды
Внутри поля два последовательных апострофа […]