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