Úniková sekvence - Escape sequence

V informatice je úniková sekvence kombinací znaků, které mají jiný význam než doslovné znaky; je označen jedním nebo více předcházejícími (a případně koncovými) znaky.

Příklady

  • V jazyce C a mnoha odvozených programovacích jazycích je řetězcová úniková sekvence řada dvou nebo více znaků, počínaje zpětným lomítkem\ .
    • Všimněte si, že v C zpětné lomítko bezprostředně následuje řádkem se nebude představovat escape sekvence, ale spojky fyzické zdrojové řádky do logických jedniček v druhé fázi překladu, zatímco řetězec escape sekvence jsou převedeny v páté překladu fáze.
    • K reprezentaci samotného znaku zpětného lomítka \\lze použít, přičemž první zpětné lomítko označuje únik a druhé určuje, že zpětné lomítko uniká.
    • Znaku lze uniknout několika různými způsoby. Za předpokladu, že kódování ASCII, escape sekvence \x5c, \\, \134a \x5Cvšechny kódují stejný charakter: zpětným lomítkem \.
  • U zařízení, která reagují na únikové sekvence ANSI , [definuje únikovou sekvenci kombinace tří nebo více znaků začínajících znakem „escape“ ASCII (desetinný znakový kód 27), za kterým následuje znak závorky vlevo (kód desetinného znaku 91).

Kontrolní sekvence

Na pokyn tato řada znaků, se používá ke změně stavu z počítačů a jejich připojených periferních zařízení, než mají být zobrazeny nebo vytištěny jako pravidelné datové bajty by bylo, tyto jsou také známé jako kontrolních sekvencí , které odrážejí jejich použití při ovládání zařízení , počínaje s iniciátorem kontrolní sekvence - původně ASCII kód ​​„únikového znaku“ - znak 27 (desítkově) - na klíčenky často napsaný „Esc“ .

Se zavedením terminálů ANSI většina únikových sekvencí začala dvěma znaky „ESC“, poté „[“ nebo speciálně přiděleným znakem CSI s kódem 155 (desetinně).

Ne všechny řídicí sekvence používaly znak escape; například:

  • Sekvence pro ovládání terminálu Data General , ale často se jim stále říkalo únikové sekvence a velmi běžné používání speciálních znaků „unikající“ v programovacích jazycích a v parametrech příkazového řádku dnes často používají k zahájení sekvence znak „zpětné lomítko“.

Únikové sekvence v komunikaci se běžně používají, když počítač a periferní zařízení mají pouze jeden kanál, přes který mohou odesílat informace tam a zpět (takže únikové sekvence jsou příkladem signalizace v pásmu ). Byly běžné, když většina hloupých terminálů používala ke komunikaci ASCII se 7 datovými bity a někdy by se používala k přepnutí na jinou znakovou sadu pro „cizí“ nebo grafické znaky, které by jinak byly omezeny 128 kódy dostupnými v 7 datových bitech. Dokonce i relativně „hloupé“ terminály reagovaly na některé únikové sekvence, včetně původních mechanických tiskáren Teletype (na kterých byly založeny „skleněné Teletypy“ nebo VDU) reagovaly na znaky 27 a 31 střídáním režimů písmen a číslic.

Klávesnice

Úniková postava je obvykle přiřazena klávesě Esc na klávesnici počítače a může být odeslána jiným způsobem než jako součást únikové sekvence. Klávesu Esc lze například použít jako vstupní znak v editorech, jako je vi , nebo k zálohování jedné úrovně v nabídce v některých aplikacích. Terminály Hewlett Packard HP 2640 měly klíč pro režim „zobrazovacích funkcí“, který zobrazoval grafiku všech řídicích znaků, včetně Esc, aby pomohl při ladění aplikací.

Pokud klíč Esc a další klíče, které odesílají řídicí sekvence, mají mít pro aplikaci smysl, vznikne nejednoznačnost, pokud se používá terminál znaků . Když aplikace obdrží znak úniku ASCII , není jasné, zda je tento znak výsledkem stisknutí klávesy Esc uživatelem nebo zda se jedná o počáteční znak únikové sekvence (např. Vyplývající ze stisknutí klávesy se šipkou). Tradiční metodou řešení nejednoznačnosti je pozorování, zda jiný znak rychle následuje znak úniku. Pokud ne, předpokládá se, že není součástí únikové sekvence. Tato heuristika může za určitých okolností selhat, zejména bez vysokých moderních komunikačních rychlostí.

Sekvence úniků sahají minimálně do Baudotova kódu z roku 1874 .

Ovládání modemu

Sada příkazů Hayes například definuje jedinou řídicí sekvenci +++ . (Za účelem interpretace +++ , která může být součástí dat, jako úniková sekvence odesílatel zastaví komunikaci na jednu sekundu před a po +++ ). Když na to modem narazí v proudu dat, přepne se z normálního provozního režimu, který jednoduše odesílá jakékoli znaky do telefonu, do příkazového režimu, ve kterém se následující data považují za součást příkazového jazyka. Můžete se přepnout zpět do režimu online odesláním příkazu O.

Sada příkazů Hayes je modální , přepíná z příkazového režimu do online režimu. To není vhodné v případě, že se příkazy a data budou rychle přepínat tam a zpět. Příkladem nemodálního řídicího jazyka únikové sekvence je VT100 , který používal řadu příkazů s předponou zavaděče řídicí sekvence .

Porovnání s řídicími znaky

Řídicí znak je znak, který má izolovaně nějakou řídicí funkci, například návrat vozíku (CR). Únikové sekvence se naopak skládají z jednoho nebo více únikových znaků, které mění interpretaci následujících znaků.

Terminály video dat ASCII

Tyto VT52 Svorka jednoduchá Digraph příkazy jako únikové-A: v izolaci, „A“ potom znamená písmeno „A“, ale v rámci sekvence escape „escape-A“, to mělo jiný význam. VT52 také podporoval parametry: nejednalo se o přímý řídicí jazyk kódovaný jako substituce.

Pozdější terminál VT100 implementoval sofistikovanější standard únikových sekvencí ANSI (nyní ECMA-48) pro funkce, jako je ovládání pohybu kurzoru, znaková sada a vylepšení zobrazení. Řada Hewlett Packard HP 2640 měla snad nejpropracovanější únikové sekvence pro režimy bloků a znaků, programovací klávesy a jejich soft popisky, grafické vektory a dokonce ukládání dat na pásky nebo soubory na disku.

Použití v systému DOS a Windows

Nástroj, ANSI.SYS , může být použita k tomu, aby tlumočení z ANSI (ECMA-48) koncových escape sekvencí podle DOS (pomocí $ev PROMPT příkazu), nebo ve vedení oken v 16-bitové Windows . Vzestup aplikací grafického uživatelského rozhraní , které přímo zapisují na grafické karty, výrazně snížil použití únikových sekvencí na platformách Microsoft, ale stále je lze použít k vytváření interaktivních znakových rozhraní na základě náhodného přístupu s rutinami knihovny založenými na znakech, jako jsou jako printf bez použití programu GUI.

Použití na displejích Linux a Unix

Výchozí textový terminál a textová okna (například pomocí xterm ) reagují na únikové sekvence ANSI.

Cituji útěk

Přehled

Pokud je v uvozovkovém řetězci vyžadován znak escape, v programovacích a skriptovacích jazycích se používají dvě strategie:

  • zdvojený oddělovač (např. 'He didn''t do it.')
  • sekundární úniková sekvence

Příkladem druhé možnosti je použití stříšky ( ^). Např. Se v CMD zobrazí „Můžete tak učinit pomocí Vyjmout a Vložit“ . (jinak má ampersand omezené použití)

echo You can do so via Cut^&Paste

Podrobně

Běžným použitím únikových sekvencí je ve skutečnosti odebrání řídicích znaků nalezených v binárním datovém proudu, aby omylem nezpůsobily svou řídicí funkci. V tomto případě je řídicí znak nahrazen definovaným „znakem escape“ (který nemusí být znakem US-ASCII) a jedním nebo více dalšími znaky; po ukončení kontextu, kde by kontrolní znak způsobil akci, je sekvence rozpoznána a nahrazena odstraněným znakem. K přenosu samotného „únikového znaku“ jsou odeslány dvě kopie.

V mnoha programovacích jazycích a rozhraních příkazového řádku se únikové sekvence používají v literálech znaků a řetězcových literálech k vyjádření znaků, které nelze tisknout, nebo se střetávají se syntaxí znaků nebo řetězců. Například samotné řídicí znaky nemusí být povoleno umisťovat do programu kódovaného editorským programem nebo mohou mít nežádoucí vedlejší účinky, pokud jsou zadány do příkazu. Znak ukončení nabídky je také problém pro programátory, který lze vyřešit únikem. Ve většině kontextů je únikovým znakem zpětné lomítko („ \ “).

Vzorky

Například znak jednoduché uvozovky může být vyjádřen jako, '\''protože zápis '''je nepřijatelný.

Mnoho moderních programovacích jazyků určuje znak dvojité uvozovky ( ") jako oddělovač řetězcového literálu. Znak zpětného lomítka obvykle poskytuje způsoby, jak zahrnout dvojité uvozovky uvnitř řetězcového literálu, například úpravou významu znaku dvojité uvozovky vloženého do řetězce ( \") nebo úpravou významu posloupnosti znaků včetně šestnáctkové hodnoty znaku dvojité uvozovky ( \x22). Obě sekvence kódují doslovný dvojitý citát ( ").

V Perlu nebo Pythonu 2

print "Nancy said "Hello World!" to the crowd.";

vytvoří syntaktickou chybu, zatímco:

print "Nancy said \"Hello World!\" to the crowd.";  ### example of \"

produkuje zamýšlený výstup. Další alternativa:

print "Nancy said \x22Hello World!\x22 to the crowd.";  ### example of \x22

používá "\ x" k označení následujících dvou znaků jako hexadecimálních číslic, kde "22" je hodnota ASCII pro dvojitou uvozovku v hexadecimálním formátu.

C , C ++ , Java a Ruby umožňují úplně stejné dva únikové styly zpětného lomítka. Jazyk PostScript a formát Microsoft RTF také používají úniky zpětného lomítka. Citovaný tisknutelné kódování používá znaménko rovná se jako znak escape.

URL a URI používají procentní kódování k citování znaků se zvláštním významem, jako u znaků jiných než ASCII.

Dalším podobným (a částečně se překrývajícím) syntaktickým trikem je stropping .

Některé programovací jazyky také poskytují jiné způsoby, jak reprezentovat speciální znaky v literálech, aniž by vyžadovaly únikový znak (viz např. Kolize oddělovače ).

Viz také

Reference