Escape-последовательность
В информатике — escape-последовательность это комбинация символов , имеющая значение, отличное от содержащихся в ней буквальных символов; [1] он отмечен одним или несколькими предшествующими (и, возможно, завершающими) символами. [2]
Примеры
[ редактировать ]- В C и многих производных языках программирования escape-последовательность строки представляет собой серию из двух или более символов, начинающуюся с обратной косой черты.
\
. [3]- Обратите внимание, что в языке C обратная косая черта, за которой сразу следует символ новой строки, не представляет собой escape-последовательность, а объединяет физические исходные строки в логические на второй фазе трансляции, тогда как escape-последовательности строк преобразуются на пятой фазе трансляции. [4]
- Чтобы представить сам символ обратной косой черты,
\\
можно использовать, причем первая обратная косая черта указывает на экранирование, а вторая указывает, что обратная косая черта экранируется. [5] - Персонажа можно экранировать несколькими способами. Предполагая кодировку ASCII, escape-последовательности
\x5c
( шестнадцатеричный ),\\
,\134
( восьмеричный ) и\x5C
все кодируют один и тот же символ: обратную косую черту\
.
- Для устройств, реагирующих на escape-последовательности ANSI , комбинация трех или более символов, начинающаяся с escape-символа ASCII (десятичный код символа 27), за которым следует символ левой скобки.
[
(десятичный код символа 91) определяет escape-последовательность.
Последовательности управления
[ редактировать ]При указании эта серия символов используется для изменения состояния компьютеров периферийных и подключенных к ним устройств , а не для отображения или печати, как обычные байты данных . Они также известны как управляющие последовательности , что отражает их использование в управлении устройствами. начиная с инициатора управляющей последовательности — первоначально это был код ASCII «escape-символа» — символ 27 (десятичный) — на колпачках клавиш часто пишется «Esc» .
С появлением терминалов ANSI большинство escape-последовательностей начиналось с двух символов «ESC», затем «[» или специально выделенного символа CSI с кодом 155 (десятичный).
Не во всех управляющих последовательностях использовался escape-символ; например:
- последовательности управления модемом, используемые AT/ Hayes-совместимыми модемами [6] [7]
- Данные Общие последовательности управления терминалом, [8] [9] [10] но их часто все еще называли 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-символов , которые меняют интерпретацию последующих символов.
Терминалы видеоданных ASCII
[ редактировать ]Терминал VT52 использовал простые команды орграфа , такие как escape-A: изолированно «A» просто означало букву «A», но как часть escape-последовательности «escape-A» она имела другое значение. VT52 также поддерживал параметры: это не был простой язык управления, закодированный как подстановка.
В более позднем терминале VT100 реализован более сложный стандарт escape-последовательностей ANSI (теперь ECMA-48) для таких функций, как управление движением курсора, набор символов и улучшения отображения. Серия Hewlett Packard HP 2640 имела, пожалуй, самые сложные escape-последовательности для блочных и символьных режимов, программных клавиш и их программных меток, графических векторов и даже сохранения данных на ленте или в файлах на диске.
Использование в DOS и Windows
[ редактировать ]Утилита ANSI.SYS . [20] может использоваться для интерпретации escape-последовательностей терминала ANSI (ECMA-48) под DOS (с помощью $e
в команде PROMPT ) или в командных окнах в 16-разрядной версии Windows . Появление приложений с графическим пользовательским интерфейсом , которые напрямую записывают данные на карты дисплея, значительно сократило использование escape-последовательностей на платформах Microsoft, но их все еще можно использовать для создания интерактивных символьных экранных интерфейсов с произвольным доступом с помощью таких символьных библиотечных процедур, как как printf, не прибегая к программе с графическим интерфейсом.
Использование в дисплеях Linux и Unix
[ редактировать ]Текстовый терминал по умолчанию и текстовые окна (например, при использовании xterm ) реагируют на escape-последовательности ANSI.
Цитирование побега
[ редактировать ]Обзор
[ редактировать ]Когда в кавычках/экранированных строках необходим escape-символ , в языках программирования и сценариев используются две стратегии:
- двойной разделитель (например,
'He didn''t do it.'
) [21] - вторичная escape-последовательность
Примером последнего является использование курсора ( ^
). Например, это выводит «Вы можете сделать это с помощью Cut&Paste» в CMD . (в противном случае амперсанд имеет ограниченное использование) [22]
echo You can do so via Cut^&Paste
Подробно
[ редактировать ]Фактически, escape-последовательности обычно используются для удаления управляющих символов, обнаруженных в потоке двоичных данных, чтобы они не вызывали свою управляющую функцию по ошибке. В этом случае управляющий символ заменяется определенным «escape-символом» (который не обязательно должен быть escape-символом US-ASCII) и одним или несколькими другими символами; после выхода из контекста, в котором управляющий символ мог бы вызвать действие, последовательность распознается и заменяется удаленным символом. [22] Для передачи самого «escape-символа» отправляются две копии. [21]
Во многих языках программирования и интерфейсах командной строки escape-последовательности используются в символьных и строковых литералах для выражения символов, которые не подлежат печати или конфликтуют с синтаксисом символов или строк. Например, сами управляющие символы могут быть запрещены для размещения в программе, закодированной программой-редактором, или могут иметь нежелательные побочные эффекты, если они вводятся в команду. Символ конца кавычки также является проблемой для программистов, которую можно решить, экранируя его. В большинстве случаев escape-символом является обратная косая черта (« \ »).
Образцы
[ редактировать ]Например, символ одинарной кавычки может быть выражен как '\''
с момента написания '''
не приемлемо.
Многие современные языки программирования определяют символ двойной кавычки ( "
) в качестве разделителя строкового литерала. Escape-символ обратной косой черты обычно обеспечивает способы включения двойных кавычек внутри строкового литерала, например, путем изменения значения символа двойной кавычки, встроенного в строку ( \"
) или путем изменения значения последовательности символов, включая шестнадцатеричное значение символа двойной кавычки ( \x22
). Обе последовательности кодируют буквальную двойную кавычку ( "
).
print "Nancy said "Hello World!" to the crowd.";
выдает синтаксическую ошибку, тогда как:
print "Nancy said \"Hello World!\" to the crowd."; ### example of \"
производит запланированный результат. Другая альтернатива:
print "Nancy said \x22Hello World!\x22 to the crowd."; ### example of \x22
использует «\x», чтобы указать, что следующие два символа являются шестнадцатеричными цифрами, причем «22» — это значение ASCII для двойной кавычки в шестнадцатеричном формате.
C , C++ , Java и Ruby допускают одни и те же два стиля экранирования обратной косой черты. Язык PostScript и Microsoft Rich Text Format также используют обратную косую черту. Кодировка quote-printable использует знак равенства в качестве escape-символа.
URL и URI используют процентное кодирование для заключения в кавычки символов, имеющих особое значение, как и для символов, отличных от ASCII.
Еще один похожий (и частично перекрывающийся) синтаксический прием — это строппинг .
Некоторые языки программирования также предоставляют другие способы представления специальных символов в литералах, не требуя escape-символа (см., например, столкновение разделителей ).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Эвакуационная последовательность» .
- ^ «Персонажи» . Учебники по Java .
- ^ «Эскейп-последовательности» .
Комбинации символов, состоящие из обратной косой черты
\
за которыми следует буква или комбинация цифр, называются escape-последовательностями . - ^ «Проект комитета N1570 по стандарту ISO/IEC 9899:201x» (PDF) .
5.1.1.2 Фазы перевода, 2.: Каждый экземпляр символа обратной косой черты (
\
) сразу за которым следует символ новой строки, удаляется, объединяя физические исходные строки в логические исходные строки. [...] - ^ «Эскейп-последовательности» . ИБМ .
- ^ «Глава 5. AT-команды» (PDF) .
- ^ «Набор AT-команд и сводка регистров для модулей аналоговых модемов» .
- ^ «Общие данные терминалов: обсуждение» .
- ^ «Что такое терминал?» .
- ^ «Общие данные DG210, программное обеспечение для эмуляции терминала DG211» .
- ^ «Эскейп-последовательность» .
- ^ «Глоссарий справочника по терминалам и принтерам» .
- ^ «Двенадцать полезных команд «vi»» .
команды vi […] Нажатие клавиши Esc (Escape) — это то, как вы […]
- ^ «Пять неожиданных применений клавиши Esc» . ПКмир . 29 октября 2009 г.
- ^ «Что такое ASCII? объясняет The Economist» . Экономист . 09.06.2013.
- ^ «Код Бодо и CCITT» .
Код Бодо, изобретенный в 1870 году и запатентованный в 1874 году Ж. Бодо, […]
- ^ «Руководство по использованию наборов символов в Европе» .
элементы C0 и C1 управляющих символов […] 5-битный код, запатентованный Жаном-Морисом-Эмилем Бодо (1845-1903) в 1874 году.
- ^ «Базовый набор AT-команд Hayes» . 05.02.2011.
+++ - "Escape Sequence" - Эта команда инициирует escape-последовательность для возврата модема в онлайновый командный режим.
- ^ «Основы программирования модема» .
Когда модем находится в командном режиме, он может принимать команды от вас.
- ^ 17. Понимание ANSI.SYS — Special Edition с использованием MS-DOS 6.22 .
- ^ Jump up to: а б «Редактирование апострофа ('aaa') (Справочник по языку FORTRAN 77)» .
Внутри поля два последовательных апострофа […]
- ^ Jump up to: а б «CMD — Пакетная обработка — Экранирование с помощью курсора» .