stringtranslate.com

Escape-последовательность

В информатике escape - последовательность — это комбинация символов , имеющая значение, отличное от содержащихся в ней буквальных символов; [1] он отмечен одним или несколькими предшествующими (и, возможно, завершающими) символами. [2]

Примеры

Последовательности управления

При указании эта серия символов используется для изменения состояния компьютеров и подключенных к ним периферийных устройств, а не для отображения или печати, как обычные байты данных . Они также известны как управляющие последовательности , что отражает их использование в управлении устройствами , начиная с с инициатором управляющей последовательности — первоначально кодом 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-символов , которые меняют интерпретацию последующих символов.

Терминалы видеоданных 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-символ , в языках программирования и сценариев используются две стратегии:

Примером последнего является использование курсора ( ^). Например, это выводит «Вы можете сделать это с помощью 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-символа (см., например, столкновение разделителей ).

Смотрите также

Рекомендации

  1. ^ «Эскейп-последовательность».
  2. ^ «Персонажи». Учебники по Java .
  3. ^ «Escape-последовательности». Комбинации символов, состоящие из обратной косой черты , за которой следует буква или комбинация цифр, называются escape-последовательностями .\
  4. ^ «Проект комитета N1570 ISO/IEC 9899:201x» (PDF) . 5.1.1.2 Этапы трансляции, 2.: Каждый экземпляр символа обратной косой черты ( ), за которым сразу следует символ новой строки, удаляется, соединяя физические строки источника в логические строки источника. [...]\
  5. ^ «Escape-последовательности». ИБМ .
  6. ^ «Глава 5 – AT-команды» (PDF) .
  7. ^ «Набор AT-команд и сводка регистров для модулей аналоговых модемов» .
  8. ^ «Терминалы Data General: обсуждение» .
  9. ^ «Что такое терминал?».
  10. ^ «Общие данные, программное обеспечение для эмуляции терминала DG210 DG211» .
  11. ^ «Escape-последовательность».
  12. ^ "Глоссарий справочника по терминалам и принтерам" .
  13. ^ «Двенадцать полезных команд «vi»» . команды vi […] Нажатие клавиши Esc (Escape) — это то, как вы […]
  14. ^ «Пять неожиданных вариантов использования клавиши Esc». ПКмир . 29 октября 2009 г.
  15. ^ «Что такое ASCII? Экономист объясняет» . Экономист . 9 июня 2013 г.
  16. ^ «Код Бодо и CCITT» . Код Бодо, изобретенный в 1870 году и запатентованный в 1874 году Ж. Бодо, […]
  17. ^ «Руководство по использованию наборов символов в Европе». элементы C0 и C1 управляющих символов […] 5-битный код, запатентованный Жаном-Морисом-Эмилем Бодо (1845-1903) в 1874 году.
  18. ^ «Базовый набор AT-команд Hayes» . 05.02.2011. +++ - "Escape Sequence" - Эта команда инициирует escape-последовательность для возврата модема в командный режим онлайн.
  19. ^ «Основы программирования модема». Когда модем находится в командном режиме, он может принимать команды от вас.
  20. ^ 17. Понимание ANSI.SYS — Special Edition с использованием MS-DOS 6.22.
  21. ^ ab «Редактирование апострофа ('aaa') (Справочник по языку FORTRAN 77)» . Внутри поля два последовательных апострофа […]
  22. ^ ab «CMD — Пакетная обработка — Экранирование с помощью курсора».