Управляющая последовательность - это комбинация символов который имеет значение, отличное от содержащихся в нем буквальных символов; он отмечен одним или несколькими предшествующими (и, возможно, завершающими) символами.
При указании этой серии символов s используется для изменения состояния компьютеров и подключенных к ним периферийных устройств, а не для отображения или печати как обычных данных байтов, они также известны как управляющие последовательности, что отражает их использование в элемент управления устройством, начиная с Инициатора управляющей последовательности - первоначально «escape символ «Код ASCII - символ 27 (десятичный) - часто пишется« Esc »на клавишах.
. С появлением терминалов ANSI большинство escape-последовательностей начинались с двух символов« ESC », затем« [»или специально выделенного CSI символ с кодом 155 (десятичный).
Не во всех управляющих последовательностях используется escape-символ; например:
escape-последовательности в коммуникациях обычно используются, когда компьютер и периферийное устройство имеют только один проходной канал. который отправляет информацию туда и обратно (так что escape-последовательности являются примером внутриполосной сигнализации ). Они были обычным явлением, когда большинство немых терминалов использовали ASCII с 7 битами данных для связи, а иногда использовались для переключения на другой набор символов для "чужих" или графических символов, которые в противном случае был ограничен 128 кодами, доступными в 7 битах данных. Даже относительно «тупые» терминалы реагировали на некоторые escape-последовательности, в том числе оригинальные механические принтеры Teletype (на которых были основаны «стеклянные телетайпы» или дисплеи) реагировали на символы 27 и 31, чтобы переключаться между режимами букв и цифр.
Управляющий символ обычно назначается клавише Esc на компьютерной клавиатуре и может быть отправлен другими способами, кроме как как часть escape-последовательности. Например, клавишу Esc можно использовать в качестве символа ввода в редакторах, таких как vi, или для резервного копирования одного уровня в меню в некоторых приложениях. Терминалы Hewlett Packard HP 2640 имели кнопку для режима «функций отображения», который отображал графику для всех управляющих символов, включая Esc, для облегчения отладки приложений.
Если предполагается, что клавиша Esc и другие клавиши, отправляющие escape-последовательности, имеют значение для приложения, возникает неоднозначность, если используется символьный терминал . Когда приложение получает escape-символ ASCII, неясно, является ли этот символ результатом нажатия пользователем клавиши Esc или начальным символом escape-последовательности (например, полученным от стрелки нажатие клавиши). Традиционный метод разрешения неоднозначности состоит в том, чтобы наблюдать, следует ли другой символ быстро за escape-символом. В противном случае предполагается, что он не является частью escape-последовательности. Эта эвристика может дать сбой при некоторых обстоятельствах, особенно без высоких современных скоростей связи.
Escape-последовательности относятся как минимум к 1874 г. код Бодо.
Например, набор команд Hayes определяет одну escape-последовательность, +++. (Чтобы интерпретировать +++, который может быть частью данных, как escape-последовательность, отправитель прекращает связь на одну секунду до и после +++). Когда модем обнаруживает это в потоке данных, он переключается из нормального режима работы, который просто отправляет любые символы на телефон, в командный режим, в котором следующие данные считаются частью командного языка. Вы можете вернуться в онлайн-режим, отправив команду O.
Набор команд Hayes - модальный, переключение из командного режима в онлайн-режим. Это не подходит в том случае, если команды и данные будут быстро переключаться вперед и назад. Примером немодального языка управления управляющими последовательностями является VT100, в котором использовалась серия команд с префиксом Control Sequence Introducer.
A управляющий символ - это символ, который изолированно выполняет некоторую управляющую функцию, такую как возврат каретки (CR). Escape-последовательности, напротив, состоят из одного или нескольких escape-символов, которые изменяют интерпретацию последующих символов.
Терминал VT52 использовал простые команды орграфа, такие как escape-A: изолированно "A" просто означало букву «A», но как часть escape-последовательности «escape-A», он имел другое значение. VT52 также поддерживал параметры: это был непростой язык управления, закодированный как подстановка.
В более позднем терминале VT100 реализован более сложный стандарт управляющих последовательностей ANSI (теперь ECMA-48) для таких функций, как управление перемещением курсора, набор символов и улучшения отображения. Серия Hewlett Packard HP 2640 имела, пожалуй, самые сложные escape-последовательности для блочного и символьного режимов, программных клавиш и их программных меток, графических векторов и даже для сохранения данных в файлы на магнитной ленте или диске.
Утилита ANSI.SYS может использоваться для включения интерпретации управляющих последовательностей терминала ANSI (ECMA-48) в разделе DOS (с помощью $ e
в команде PROMPT ) или в командных окнах в 16-битной Windows. Появление приложений с графическим интерфейсом, которые напрямую записывают данные на видеокарты, значительно сократило использование escape-последовательностей на платформах Microsoft, но их все еще можно использовать для создания интерактивных экранных интерфейсов на основе символов произвольного доступа с символьные библиотечные процедуры, такие как printf, без использования программы с графическим интерфейсом.
Текстовый терминал по умолчанию, а текстовые окна (например, при использовании xterm ) отвечают на escape-последовательности ANSI.
Когда в кавычках / экранированных строках необходим escape-символ , в языках программирования и сценариях используются две стратегии :
«Он этого не делал».
)Примером последней является использование символа вставки (^
Например, в CMD выводится «Вы можете сделать это с помощью Cut Paste». (В противном случае амперсанд имеет ограниченное использование)
echo. Это можно сделать с помощью Cut ^ Paste
Обычно управляющие последовательности используются для удаления управляющих символов, обнаруженных в потоке двоичных данных, чтобы они не вызывали по ошибке свою управляющую функцию. В этом случае управляющий символ - заменены определенным «escape-символом» (который не обязательно должен быть escape-символом US-ASCII) и одним или несколькими другими символами; после выхода из контекста, где управляющий символ вызвал бы действие, последовательность распознается и заменяется удаленным ch персонаж. Для передачи самого «escape-символа» отправляются две копии.
Во многих языках программирования и интерфейсах командной строки escape-последовательности используются в символьных литералах и строковые литералы для обозначения символов, которые не печатаются или противоречат синтаксису символов или строк. Например, управляющие символы сами по себе могут быть запрещены для размещения в программе, закодированной программой-редактором, или могут иметь нежелательные побочные эффекты при вводе в команду. Символ конца кавычки также является проблемой для программистов, которую можно решить, избегая его. В большинстве случаев escape-символом является обратная косая черта ("\").
Например, символ одинарной кавычки может быть выражен как '\' '
, так как запись '' '
недопустима.
Многие современные языки программирования указывают символ двойных кавычек ("
) в качестве разделителя для строковый литерал. Управляющий символ обратной косой черты обычно позволяет включать двойные кавычки внутри строкового литерала, например, путем изменения значения символа двойных кавычек, встроенного в строку (\ "
), или путем изменения значения последовательности символов. включая шестнадцатеричное значение символа двойной кавычки (\ x22
). Обе последовательности кодируют буквальную двойную кавычку ("
).
напишите «Нэнси сказала толпе« Привет, мир! ».»;
выдает синтаксическую ошибку, тогда как:
print «Нэнси сказала \" Hello World! \ "Толпе.»; ### пример \ "
производит намеченный результат. Другая альтернатива:
print" Нэнси сказала \ x22Hello World! \ x22 толпе. "; ### пример \ x22
использует" \ x "означает, что следующие два символа являются шестнадцатеричными цифрами," 22 "является значением ASCII для двойной кавычки в шестнадцатеричном формате.
C, C ++, Java и Ruby все допускают точно такие же два стиля escape-символа обратной косой черты. Язык PostScript и Microsoft Rich Text Format также используют escape-символы обратной косой черты. В кодировке quoted-printable используется кодировка знак равенства в качестве escape-символа.
URL и URI используют процентное кодирование для заключения в кавычки символов со специальным значением, как для символов, отличных от ASCII.
Другой похожий (и частично перекрывающийся) синтаксический прием - это строппинг.
Некоторые языки программирования также предоставляют другие способы представления специальных символов в литералах, не требуя escape-символа (см., Например, столкновение разделителей ).