Jump to content

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

(Перенаправлено из 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-символ; например:

  • Данные Общие последовательности управления терминалом, [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). Обе последовательности кодируют буквальную двойную кавычку ( ").

В Perl или Python 2

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-символа (см., например, столкновение разделителей ).

См. также

[ редактировать ]
  1. ^ «Эвакуационная последовательность» .
  2. ^ «Персонажи» . Учебники по Java .
  3. ^ «Эскейп-последовательности» . Комбинации символов, состоящие из обратной косой черты \ за которыми следует буква или комбинация цифр, называются escape-последовательностями .
  4. ^ «Проект комитета N1570 по стандарту ISO/IEC 9899:201x» (PDF) . 5.1.1.2 Фазы перевода, 2.: Каждый экземпляр символа обратной косой черты ( \) сразу за которым следует символ новой строки, удаляется, объединяя физические исходные строки в логические исходные строки. [...]
  5. ^ «Эскейп-последовательности» . ИБМ .
  6. ^ «Глава 5. AT-команды» (PDF) .
  7. ^ «Набор AT-команд и сводка регистров для модулей аналоговых модемов» .
  8. ^ «Общие данные терминалов: обсуждение» .
  9. ^ «Что такое терминал?» .
  10. ^ «Общие данные DG210, программное обеспечение для эмуляции терминала DG211» .
  11. ^ «Эскейп-последовательность» .
  12. ^ «Глоссарий справочника по терминалам и принтерам» .
  13. ^ «Двенадцать полезных команд «vi»» . команды vi […] Нажатие клавиши Esc (Escape) — это то, как вы […]
  14. ^ «Пять неожиданных применений клавиши Esc» . ПКмир . 29 октября 2009 г.
  15. ^ «Что такое ASCII? объясняет The Economist» . Экономист . 09.06.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. ^ Jump up to: а б «Редактирование апострофа ('aaa') (Справочник по языку FORTRAN 77)» . Внутри поля два последовательных апострофа […]
  22. ^ Jump up to: а б «CMD — Пакетная обработка — Экранирование с помощью курсора» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f48d3fc2ba16f4d8491dadd74bce9be2__1715775660
URL1:https://arc.ask3.ru/arc/aa/f4/e2/f48d3fc2ba16f4d8491dadd74bce9be2.html
Заголовок, (Title) документа по адресу, URL1:
Escape sequence - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)