Escape-Sequenz

Eine Escape-Sequenz (nach dem Escape-Zeichen, englisch to escape ‚entkommen‘) ist eine Zeichenkombination in der technischen Informatik, die keinen Text repräsentiert, sondern vom Gerät abgefangen wird und eine Sonderfunktion ausführt. Bei einem Bildschirmterminal kann dies z. B. die Cursor-Positionierung sein, bei einem Drucker die Umschaltung auf eine andere Schriftgröße oder das Auswerfen der Seite (ANSI-Escapesequenz).

Als englisch Escaping wird auch die Nutzung eines Maskierungszeichens bezeichnet, das ebenfalls eine Escape-Sequenz darstellt. Umgekehrt wird hier ein Zeichen, das normalerweise als Teil einer Sonderfunktion erkannt würde, ohne Funktion interpretiert.

Funktionsweise

Der Name leitet sich von dem Zeichen ab, mit dem die Sequenz meistens eingeleitet wird; dem ESC-Zeichen (im ASCII-Zeichensatz Hexadezimal-Code 1B, dezimal 27), welches spätestens seit 1968 als Umschaltzeichen zwischen normaler Bedeutung der Zeichen und Sonderfunktion benutzt wurde.[1]

Das jeweilige Programm – unabhängig davon, ob es sich um eine Anwendung für Desktoprechner oder ein Steuerprogramm in einem Peripheriegerät handelt – erkennt beim Verarbeiten einer Zeichenfolge, zum Beispiel eines Textes, das Escape-Zeichen, steigt aus der normalen Verarbeitung aus und löst die der folgenden Zeichensequenz zugeordnete Sonderfunktion aus. Anschließend wird die normale Verarbeitung fortgesetzt. Während der Bearbeitung des Textes dagegen, zum Beispiel in einem Texteditor, bleibt ein Escape-Zeichen als gewöhnliches Zeichen uninterpretiert und löst damit keine Funktion aus. Ein Sonderfall sind WYSIWYG-Programme, zu denen beispielsweise moderne Textverarbeitungsprogramme zählen, bei denen die Anzeige direkt der Ausgabe mit allen Sonderfunktionen entspricht.

Um beim Programmieren nicht-druckbare Steuerzeichen im Quelltext darzustellen, wird bestimmten Folgen von druckbaren Zeichen die Bedeutung einer Sonderfunktion verliehen, indem ein (anderes) bestimmtes Zeichen vorangestellt wird, das als Maskierungszeichen dient. So steht in der Programmiersprache C innerhalb einer Zeichenkettenkonstanten beispielsweise ein \n für einen Zeilenumbruch, ein \t für ein Horizontal-Tabulatorzeichen und ein \" für ein Anführungszeichen (während das einfache " nicht Teil einer Zeichenketten-Konstanten ist, sondern deren Ende bezeichnet). Eine solche Zeichenfolge wird in Übertragung der alten Funktionsbezeichnung ebenfalls Escape-Sequenz genannt, obwohl das eigentliche ESC-Zeichen dabei keine Verwendung mehr findet. In ähnlicher Weise wird von Microsoft Word in der Bearbeitungsfunktion „Suchen und Ersetzen“ das Zeichen ^ verwendet, beispielsweise ^t für das Horizontal-Tabulatorzeichen.

Verwendung zur Druckersteuerung

Nach wie vor werden Escape-Sequenzen bei der Ansteuerung von Druckern verwendet. Beispiele für weit verbreitete Escape-Sequenz-basierte Druckersprachen sind:

Manche Drucker arbeiten dagegen nicht mit Escape-Sequenzen, sondern beispielsweise mit Seitenbeschreibungssprachen wie PostScript oder empfangen Befehle über eine separate Steueradresse auf dem Bus (z. B. bei Commodore-Rechnern).

Verwendung zur Terminalsteuerung

Im Terminalbereich sind die ANSI-Escapesequenzen, welche auf den Escape-Sequenzen des Terminals VT100 beruhen, weit verbreitet.[2] Sie wurden als ANSI X3.41-1974 und X3.64-1977 bzw. ECMA-48 (1976) allgemeiner Standard. Sequenzen bestehen dabei aus dem Steuerzeichen Escape und einer Folge von druckbaren Zeichen. ECMA-48 erhielt 1991 seine fünfte und letzte Erweiterung[3] und wurde auch als ISO/IEC 6429 standardisiert.

Beispiele: ESC c (Terminal zurücksetzen), ESC K (Zeile ab Cursor löschen), ESC PnA (n ist eine Dezimalzahl, Cursor um (n) Zeilen aufwärts). Dieser Standard wurde so populär, dass Konsolentreiber wie ANSI.SYS für MS-DOS (bzw. allgemein PC-kompatibles DOS) und OS/2, die virtuellen Konsolen und Terminal-Fenster der meisten Unix-artigen Betriebssysteme (wie beispielsweise macOS und Linux) oder auch die Shell des AmigaOS diese Sequenzen ebenfalls unterstützen. Auch die Eingabeaufforderung von Windows 10 unterstützt ANSI-Escapesequenzen ab Version 1511. Erwähnenswert ist jedoch auch, dass so gut wie alle der genannten Konsolen und Terminals nur jeweils einen Teil aller definierten ANSI-Escapesequenzen implementieren.

In C und verwandten Programmiersprachen

In C und zu C verwandten Programmiersprachen wie C++, C#, Java, awk, Perl und JavaScript können in Zeichenfolgen durch folgende Escape-Sequenzen häufig benötigte Steuerzeichen eingefügt werden (wobei nicht alle dieser Sprachen alle hier aufgeführten Sequenzen unterstützen). In C selbst sind Escape-Sequenzen, auf Deutsch auch Flucht-Sequenzen, ein Teil des Ausführungszeichensatzes der Programmiersprache. Diese sind auch gemäß ANSI C standardisiert, obwohl manche Compiler (auf bestimmten Betriebssystemen) zusätzlich auch vom Standard abweichende Escape-Sequenzen verwenden können. Die Bezeichnungen vieler Steuerzeichen stammen noch aus der Zeit, als Ausgaben vorwiegend auf Fernschreibern und Druckern erfolgten.

In C und damit verwandten Programmiersprachen wird eine Escape-Sequenz mit dem Backslash, Taste:  \, eingeleitet.

Escape-Sequenzen in C und C++
\aakustisches Signal (von englisch alert)
\bRückschritt (von englisch backspace)
\e od.
\E
ANSI Escape, hexadezimal 0x1B

Ein Escapezeichen für eine höhere Interpretationsebene, siehe oben. Nicht Bestandteil von ISO C und ISO C++!

\fSeitenvorschub (von englisch form feed)
\nZeilenvorschub (von englisch new line)
\rWagenrücklauf (von englisch carriage return)
\tHorizontal-Tabulatorzeichen (von englisch horizontal tabulator)
\vVertikal-Tabulatorzeichen (von englisch vertical tabulator)
\xhh..Direkte Zeichenauswahl durch folgende Hexadezimalziffern hh (von hexadezimal). Beispiel: \x40 entspricht dem Zeichen '@'.
Falls die so gebildete Hexadezimalzahl größer ist, als in einem Zeichen dargestellt werden kann, ist das Ergebnis implementierungsabhängig.
\oooDirekte Zeichenauswahl durch folgende ein bis drei Oktalziffern ooo. Beispiel \100 entspricht dem Zeichen '@'.
Die Kurzform mit einer oder zwei Oktalziffern kann nur benutzt werden, wenn keine weitere Oktalziffer folgt.\0 (Nullzeichen, NUL) ist ein Spezialfall dieser Regel.
\uhhhhUnicode-Zeichen; Es müssen stets vier Hexadezimalziffern hhhh folgen. Beispiel:\u20ac für das Euro-Symbol U+20AC "€"
\UhhhhhhhhUnicode-Zeichen, insbesondere wenn dieses außerhalb Plane 0 liegt; Es müssen stets acht Hexadezimalziffern folgen. Beispiel: \U0001D49C steht für das Unicode-Zeichen U+1D49C 𝒜 (MATHEMATICAL SCRIPT CAPITAL A)

Der Backslash (auch Rückstrich oder umgekehrter Schrägstrich) dient in dieser Form jedoch auch als Maskierungszeichen, um Zeichen des Basis-Zeichensatzes von C, also alle Zeichen, die eigentlich eine Bedeutung und Funktion innehaben, auch ohne deren Funktion verwenden zu können; das betrifft auch den Backslash selbst. Das heißt, will man Teile der sog. Grafiksymbole von C, das sind die Zeichen ! " % & / ( ) [ ] { } \ ? = ' # + * ~ - _ . : ; , | < > ^, als reines Textzeichen verwenden, so müssen diese (teilweise) mit dem Backslash als Maskierungszeichen verwendet werden.

Nutzung des Maskierungszeichens \ in C und C++
\'Das Zeichen ', einfaches Anführungszeichen
\"Das Zeichen ", doppeltes Anführungszeichen
\?Das Fragezeichen ?
\\Das Zeichen \, Backslash (umgekehrter Schrägstrich)

Maskierungszeichen zum Verhindern einer Escape-Sequenz

Da eine Escape-Sequenz durch mindestens eines der verfügbaren Zeichen eingeleitet wird, stehen fortan genau diese Zeichen nicht mehr für normalen Text zur Verfügung, da diese ja speziellen Funktionen zugeordnet werden (Funktionszeichen). Bei der Programmiersprache C ist dies der Backslash. Durch den Einfluss von C, der auch der starken Verbreitung geschuldet ist, finden sich dieselben Escape-Sequenzen auch in anderen Zusammenhängen wieder, z. B. in bestimmten Konfigurationsdateien oder auch auf einem Terminal (z. B. unter Unix, Linux oder macOS), u. a. bei der Angabe von Dateinamen.

Technisch gesehen leitet ein Maskierungszeichen ebenfalls eine Escape-Sequenz ein, jedoch ist die Funktion dieser Escape-Sequenz die, das ihr folgende Zeichen auszugeben. Die Funktion ermöglicht demnach die Nutzung des ursprünglichen Zeichens ohne deren zugeordneter Funktion.

Beispiel:

user@computer:~$ touch $HOME/Dokumente/Eine\ Datei\ mit\ Leerzeichen\ und\ einem\ \"Fragezeichen\"\?.txt

Dieser Befehl erstellt unter unixartigen Systemen (z. B. Linux oder macOS) im Benutzerverzeichnis die Datei Eine Datei mit Leerzeichen und einem "Fragezeichen"?.txt im Verzeichnis Dokumente (das Verzeichnis muss allerdings bereits existieren). Da auf einem Terminal das Leerzeichen als Trennzeichen interpretiert wird, muss es maskiert werden (englisch the character has to be escaped). Ebenso verhält es sich mit dem Anführungszeichen in einem Dateinamen: Da es normalerweise eine Zeichenkette einleitet und beendet, muss es maskiert werden, um als Zeichen verwendet zu werden. Und das Fragezeichen wird normalerweise als Wildcard interpretiert.

Im World Wide Web übernimmt das Prozentzeichen eine ähnliche Funktion beim URL-Encoding.

Weblinks

Einzelnachweise

  1. Computermuseum München: Geschichte der Seiko Epson Corporation
  2. Digital Equipment Corporation: VT100 User Guide – Handbuch des Terminals VT100 (englisch).
  3. Standard ECMA-48 Fifth Edition – June 1991 – Control Functions for Coded Character Sets. (PDF) Ecma International, Juni 1991, S. 53–54, abgerufen am 5. Mai 2015 (englisch).