Управляющая последовательность представляет собой комбинацию символов , которая имеет значение иное , чем буквенные символы , содержащиеся в нем; [1] он отмечен одним или несколькими предшествующими (и, возможно, завершающими) символами. [2]
Примеры
- В C и многих производных языках программирования escape-последовательность строки представляет собой последовательность из двух или более символов, начинающихся с обратной косой черты
\
. [3]- Обратите внимание, что в C обратная косая черта, сразу за которой следует новая строка, не составляет escape-последовательность, но объединяет физические исходные строки в логические на второй фазе трансляции, тогда как escape-последовательности строк преобразуются на пятой фазе трансляции. [4]
- Для представления самого символа обратной косой черты
\\
может использоваться, при этом первая обратная косая черта указывает на экранирование, а вторая указывает, что обратная косая черта экранируется. [5] - От персонажа можно экранировать несколько разных способов. Предполагая , что кодирование ASCII, управляющие последовательности
\x5c
,\\
,\134
и\x5C
все закодировать тот же характер: обратная косая черта\
.
- Для устройств, которые реагируют на управляющие последовательности ANSI , комбинация из трех или более символов, начинающихся с «escape-символа» ASCII (код десятичного символа 27), за которым следует символ левой скобки
[
(код десятичного символа 91), определяет escape-последовательность.
Последовательности управления
При направленном этой серии символов используются для изменения состояния на компьютеры , и подключенных к периферийным устройствам, а не отображаться или печатаются как обычные данные байты будут, они также известны как контрольные последовательности , отражающие их использование в управлении устройствами , начиная с Инициатором последовательности управления - первоначально "escape-символ" в ASCII-коде - символ 27 (десятичный) - часто записывался "Esc" на колпачках клавиш .
С появлением терминалов ANSI большинство escape-последовательностей начинались с двух символов «ESC», затем «[» или специально выделенного символа CSI с кодом 155 (десятичный).
Не во всех управляющих последовательностях используется escape-символ; Например:
- последовательности управления модемом, используемые AT / Hayes-совместимыми модемами, [6] [7] и
- Общие управляющие последовательности терминала данных, [8] [9] [10], но их часто все еще называли escape-последовательностями, и очень распространенное использование «экранирующих» специальных символов в языках программирования и параметрах командной строки сегодня часто использует «обратную косую черту». символ, чтобы начать последовательность.
Последовательности выхода в коммуникациях обычно используются, когда компьютер и периферийное устройство имеют только один канал для передачи информации туда и обратно (так что escape-последовательности являются примером внутриполосной сигнализации ). [11] [12] Они были обычным явлением, когда большинство « глупых» терминалов использовали ASCII с 7 битами данных для связи, а иногда использовались для переключения на другой набор символов для «чужих» или графических символов, которые в противном случае были бы ограничены 128 кодами. доступно в 7 битах данных. Даже относительно «тупые» терминалы реагировали на некоторые escape-последовательности, в том числе оригинальные механические принтеры Teletype (на которых были основаны «стеклянные телетайпы» или дисплеи) реагировали на символы 27 и 31, чтобы переключаться между режимами букв и цифр.
Клавиатура
Управляющий символ обычно назначается клавише 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-последовательность, отправитель прекращает связь на одну секунду до и после +++. ) Когда модем обнаруживает это в потоке данных, он переключается из нормального режима работы, который просто отправляет любые символы на телефон, в командный режим, в котором следующие данные считаются частью командного языка. Вы можете вернуться в онлайн-режим , отправив команду O.
Набор команд Hayes является модальным , переключаясь из командного режима в онлайн-режим. [18] [19] Это не подходит в случае, когда команды и данные будут быстро переключаться вперед и назад. Примером немодального языка управления управляющими последовательностями является VT100 , в котором использовалась серия команд с префиксом Control Sequence Introducer .
Сравнение с управляющими символами
Управляющий символ - это символ, который изолированно выполняет некоторую управляющую функцию, например, возврат каретки (CR). Escape-последовательности, напротив, состоят из одного или нескольких escape-символов, которые изменяют интерпретацию последующих символов.
Терминалы видеоданных ASCII
В VT52 терминал , используемый простой орграф команды , как побег-A: в изоляции, «А» означает просто буква «А», но и как часть последовательности побег «побег-A», он имел другое значение. VT52 также поддерживал параметры: это был непростой язык управления, закодированный как подстановка.
В более позднем терминале VT100 реализован более сложный стандарт управляющих последовательностей ANSI (теперь ECMA-48) для таких функций, как управление перемещением курсора, набором символов и улучшением отображения. Серия Hewlett Packard HP 2640 имела, пожалуй, самые сложные escape-последовательности для блочного и символьного режимов, программных клавиш и их программных меток, графических векторов и даже для сохранения данных в файлы на магнитной ленте или диске.
Использование в DOS и Windows
Утилита, ANSI.SYS , [20] может быть использован для того, чтобы интерпретировать из ANSI (ECMA-48) концевых последовательностей уйти под DOS (с помощью $e
в PROMPT команды) или в командных окон в 16-разрядной ОС Windows . Повышение GUI - приложений, которые непосредственно пишут для отображения карт, значительно уменьшило использование управляющих последовательностей на платформах Microsoft, но они все еще могут быть использованы для создания интерактивных персонажей на основе интерфейсов экрана произвольного доступа с символьными на основе библиотеки подпрограмм таких как printf, не прибегая к программе с графическим интерфейсом.
Использование в дисплеях Linux и Unix
Текстовый терминал по умолчанию и текстовые окна (например, с использованием xterm ) отвечают на escape-последовательности ANSI.
Цитата побег
Обзор
Когда в кавычках / экранированных строках необходим escape-символ, в языках программирования и сценариев используются две стратегии:
- двойной разделитель (например
'He didn''t do it.'
) [21] - вторичная escape-последовательность
Пример последнего - использование каретки ( ^
). Например, это выводит «Вы можете сделать это через вырезать и вставить» в CMD . (в противном случае амперсанд имеет ограниченное использование) [22]
echo Вы можете сделать это с помощью Cut ^ & Paste
В деталях
На самом деле, обычно управляющие последовательности используются для удаления управляющих символов, обнаруженных в потоке двоичных данных, чтобы они не вызывали свою управляющую функцию по ошибке. В этом случае управляющий символ заменяется определенным «escape-символом» (который не обязательно должен быть escape-символом US-ASCII) и одним или несколькими другими символами; после выхода из контекста, в котором управляющий символ вызвал бы действие, последовательность распознается и заменяется удаленным символом. [22] Для передачи самого «escape-символа» отправляются две копии. [21]
Во многих языках программирования и интерфейсах командной строки escape-последовательности используются в символьных литералах и строковых литералах , чтобы выразить символы, которые не печатаются или противоречат синтаксису символов или строк. Например, сами управляющие символы могут быть запрещены для размещения в программе, кодируемой программой-редактором, или могут иметь нежелательные побочные эффекты при вводе в команду. Символ конца кавычки также является проблемой для программистов, которую можно решить, избегая его. В большинстве случаев escape-символом является обратная косая черта (" \ ").
Образцы
Например, одинарная кавычка может быть выражена как « '\''
поскольку написание '''
недопустимо».
Многие современные языки программирования определяют символ двойных кавычек ( "
) в качестве разделителя строкового литерала. Управляющий символ обратной косой черты обычно предоставляет способы включения двойных кавычек внутри строкового литерала, например, путем изменения значения символа двойных кавычек, встроенного в строку ( \"
), или путем изменения значения последовательности символов, включая шестнадцатеричное значение символа двойных кавычек. ( \x22
). Обе последовательности кодируют буквальные двойные кавычки ( "
).
В Perl или Python 2
печать "Нэнси сказала:" Привет, мир ! "толпе". ;
выдает синтаксическую ошибку, тогда как:
print «Нэнси сказала толпе \" Hello World! \ "». ; ### пример \ "
производит желаемый результат. Другая альтернатива:
print "Нэнси сказала \ x22Hello World! \ x22 толпе." ; ### пример \ x22
использует «\ x», чтобы указать, что следующие два символа являются шестнадцатеричными цифрами, «22» - это значение ASCII для двойных кавычек в шестнадцатеричном формате.
C , C ++ , Java и Ruby допускают одинаковые два стиля экранирования с обратной косой чертой. В языке PostScript и Microsoft Rich Text Format также используются символы обратной косой черты. В кодировке с возможностью печати в кавычках в качестве escape-символа используется знак равенства .
URL-адрес и URI используют процентное кодирование для заключения в кавычки символов со специальным значением, как для символов, отличных от ASCII.
Другой похожий (и частично перекрывающийся) синтаксический прием - это строчка .
Некоторые языки программирования также предоставляют другие способы представления специальных символов в литералах, не требуя escape-символа (см., Например, конфликт разделителей ).
Смотрите также
- Управляющий персонаж
- Эскейп-персонаж
- строка формата printf
Рекомендации
- ^ «Последовательность побега» .
- ^ «Персонажи» . Учебники по Java .
- ^ «Последовательности побега» .
Комбинации символов, состоящие из обратной косой черты,
\
за которой следует буква или комбинация цифр, называются escape-последовательностями . - ^ «ISO / IEC 9899: 201x проект комитета N1570» (PDF) .
5.1.1.2 Этапы трансляции, 2 .: Каждый экземпляр символа обратной косой черты (
\
), сразу за которым следует символ новой строки, удаляется, объединяя физические исходные строки для формирования логических исходных строк. [...] - ^ «Эскейп-последовательности» .
- ^ «Глава 5 - AT-команды» (PDF) .
- ^ «Сводка по набору AT-команд и регистрам для модулей аналогового модема» .
- ^ «Терминалы данных General: обсуждение» .
- ^ "Что такое Терминал?" .
- ^ "Программа эмуляции терминала Data General DG210 DG211" .
- ^ «Последовательность побега» .
- ^ «Глоссарий по терминалам и принтерам» .
- ^ «Двенадцать полезных» vi «команд» .
Команды vi […] Нажав клавишу Esc (Escape), вы […]
- ^ «Пять неожиданных применений клавиши Esc» . PCworld . 2009-10-29.
- ^ «Что такое ASCII? Экономист объясняет» . Экономист . 2013-06-09.
- ^ «Код Бодо и CCITT» .
Код Бодо, изобретенный в 1870 г. и запатентованный в 1874 г. Ж. Бодо, […]
- ^ «Руководство по использованию наборов символов в Европе» .
элементы C0 и C1 управляющих символов […] 5-битный код, запатентованный Жаном-Морисом-Эмилем Бодо (1845–1903) в 1874 году.
- ^ «Базовый набор команд Hayes AT» . 2011-02-05.
+++ - «Escape Sequence» - Эта команда инициирует escape-последовательность для возврата модема в режим онлайн-команд.
- ^ «Основы программирования модемов» .
Когда модем находится в командном режиме, модем может принимать от вас команды.
- ^ 17. Общие сведения об ANSI.SYS - Special Edition с использованием MS-DOS 6.22 .
- ^ а б «Редактирование апострофа ('aaa') (Справочник по языку FORTRAN 77)» .
Внутри поля два последовательных апострофа […]
- ^ а б «CMD - Пакетная обработка - Спасение с помощью каретки» .