stringtranslate.com

Последовательность побега

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

Примеры

Контрольные последовательности

При указании эта серия символов используется для изменения состояния компьютеров и подключенных к ним периферийных устройств , а не для отображения или печати, как это делают обычные байты данных . Они также известны как управляющие последовательности , что отражает их использование в управлении устройствами, начиная с инициатора управляющей последовательности — изначально «символа экранирования» кода ASCII — символа 27 (десятичного) — часто обозначаемого как «Esc» на клавишных колпачках .

С появлением терминалов ANSI большинство управляющих последовательностей начиналось с двух символов «ESC», а затем «[» или специально выделенного символа CSI с кодом 155 (десятичный).

Не все управляющие последовательности использовали экранированный символ, например:

Escape-последовательности в коммуникациях обычно используются, когда компьютер и периферийное устройство имеют только один канал для передачи информации туда и обратно (поэтому escape-последовательности являются примером внутриполосной сигнализации ). [11] [12] Они были распространены, когда большинство немых терминалов использовали ASCII с 7 битами данных для связи, и иногда использовались для переключения на другой набор символов для «чужих» или графических символов, которые в противном случае были бы ограничены 128 кодами, доступными в 7 битах данных. Даже относительно «немые» терминалы реагировали на некоторые escape-последовательности, включая оригинальные механические принтеры Teletype (на которых были основаны «стеклянные телетайпы» или VDU) реагировали на символы 27 и 31 для переключения между режимами букв и цифр.

Клавиатура

Escape-символ обычно назначается клавише 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-последовательность, +++ . ( Чтобы интерпретировать +++ , которая может быть частью данных, как 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] можно использовать для включения интерпретации управляющих последовательностей терминала ANSI (ECMA-48) в DOS (используя $eв команде PROMPT ) или в окнах команд в 16-разрядной Windows . Рост числа приложений с графическим интерфейсом , которые напрямую записывают данные на видеокарты, значительно сократил использование управляющих последовательностей на платформах Microsoft, но их по-прежнему можно использовать для создания интерактивных экранных интерфейсов с произвольным доступом на основе символов с помощью библиотечных процедур на основе символов, таких как printf, без использования программы с графическим интерфейсом.

Использование в дисплеях Linux и Unix

Текстовый терминал по умолчанию и текстовые окна (например, использующие xterm ) реагируют на escape-последовательности ANSI.

Цитата побег

Обзор

Когда в строке, заключенной в кавычки/экранирование, требуется экранирующий символ , в языках программирования и скриптов используются две стратегии:

Примером последнего является использование каретки ( ^). Например, это выводит «Вы можете сделать это с помощью Cut&Paste» в CMD . (в противном случае амперсанд имеет ограниченное использование) [22]

echo Вы можете сделать это с помощью Cut^&Paste

Подробно

Распространенное использование escape-последовательностей на самом деле заключается в удалении управляющих символов, обнаруженных в двоичном потоке данных, чтобы они не вызывали их управляющую функцию по ошибке. В этом случае управляющий символ заменяется определенным "escape-символом" (который не обязательно должен быть escape-символом US-ASCII) и одним или несколькими другими символами; после выхода из контекста, где управляющий символ мог бы вызвать действие, последовательность распознается и заменяется удаленным символом. [22] Для передачи самого "escape-символа" отправляются две копии. [21]

Во многих языках программирования и интерфейсах командной строки escape-последовательности используются в символьных и строковых литералах для выражения символов, которые не печатаются или конфликтуют с синтаксисом символов или строк. Например, сами управляющие символы могут быть не допущены к размещению в программе, закодированной программой-редактором, или могут иметь нежелательные побочные эффекты при вводе в команду. Символ конца кавычки также является проблемой для программистов, которую можно решить, экранировав его. В большинстве контекстов escape-символом является обратная косая черта (" \ ").

Образцы

Например, символ одинарной кавычки может быть выражен как , '\''поскольку написание '''недопустимо.

Во многих современных языках программирования символ двойной кавычки ( ") указывается как разделитель для строкового литерала. Символ экранирования обратной косой черты обычно предоставляет способы включения двойных кавычек в строковый литерал, например, путем изменения значения символа двойной кавычки, встроенного в строку ( \"), или путем изменения значения последовательности символов, включая шестнадцатеричное значение символа двойной кавычки ( \x22). Обе последовательности кодируют литеральную двойную кавычку ( ").

На Perl или Python 2

print "Нэнси сказала толпе : " Привет, мир ! "  

выдает синтаксическую ошибку, тогда как:

print "Нэнси сказала \"Привет, мир!\" толпе." ; ### пример \"  

производит предполагаемый вывод. Другая альтернатива:

print "Нэнси сказала \x22Привет, мир!\x22 толпе." ; ### пример \x22  

использует «\x» для указания того, что следующие два символа являются шестнадцатеричными цифрами, где «22» — это значение ASCII для двойной кавычки в шестнадцатеричном формате.

C , C++ , Java и Ruby допускают абсолютно одинаковые два стиля экранирования с обратной косой чертой. Язык PostScript и Microsoft Rich Text Format также используют экранирование с обратной косой чертой. Кодировка quote-printable использует знак равенства в качестве экранирующего символа.

URL и URI используют процентное кодирование для заключения в кавычки символов со специальным значением, как и для символов, не входящих в набор ASCII.

Еще один похожий (и частично совпадающий) синтаксический прием — это стропинг .

Некоторые языки программирования также предоставляют другие способы представления специальных символов в литералах, не требующие экранирующего символа (см., например, столкновение разделителей ).

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

Ссылки

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