Séquence d'échappement
On entend par séquence d'échappement (de l'anglais escape sequence) une séquence de quelques octets et/ou de caractères présente dans un flot de texte et jouant un rôle particulier à l'endroit où elle est présente. Elle est introduite par un code prévu à cet effet, généralement le code de contrôle 0x1B
ESC (pour escape). Bien que les terminaux physiques en mode texte soient devenus rares au début du XXIe siècle, les séquences d'échappement restent utilisées dans les émulateurs de terminaux, ainsi que pour l'écriture d'interface en mode semi-graphique, grâce à l'API ncurses.
Histoire
La notion de code d'échappement a été introduite dans le code Baudot. Anecdotiquement, si l'on considère que les -
sont des 1 et les +
des 0, la séquence d'échappement du code Baudot est déjà la valeur 0x1B.
Le code 8 bits du DoD inclut une fonction Special dans les mêmes dispositions dès 1961[1].
Vers le milieu des années 1960, pratiquement tous les fabricants de terminaux vidéo les avaient pourvus en ROM de séquences d'échappement pour réaliser les opérations graphiques les plus élémentaires, à savoir effacer l'écran et déplacer le curseur à une position quelconque de l'écran. Successeurs des codes propriétaires des années 1960 (EBCDIC d'IBM notamment), les codes ANSI sont apparus dans les années 1970, et leur usage s'est répandu dans le marché informatique au début des années 1980.
Application
Cette technologie, sous la forme des séquences d'échappement ANSI est utilisée dans différents contextes ; en particulier :
- ISO/CEI 2022 ;
- VT100 ;
- ANSI.SYS ;
- Code Baudot.
Il existe au moins 157 codages de caractères différents accessibles par séquence d'échappement[2].
En langage C et C++ les séquences ASCII d'échappement sont[3] :
\'
apostrophe. Valeur hexadécimale: 0x27 ;\"
guillemet. Valeur hexadécimale : 0x22 ;\?
point d'interrogation. Valeur hexadécimale : 0x3f ;\\
Barre oblique inversée. Valeur hexadécimale : 0x5c ;\0
caractère nul. Valeur hexadécimale : 0x00 ;\a
Caractère d'appel audible. Valeur hexadécimale : 0x07 ;\b
retour arrière (backspace). Valeur hexadécimale : 0x08 ;\f
nouvelle page. Valeur hexadécimale : 0x0c ;\n
nouvelle ligne. Valeur hexadécimale : 0x0a ;\r
retour chariot. Valeur hexadécimale : 0x0d ;\t
tabulation horizontale. Valeur hexadécimale : 0x09 ;\v
tabulation verticale. Valeur hexadécimale : 0x0b ;\nnn
Valeur octale arbitraire. Valeur octale : nnn ;\xnn
Valeur hexadécimale arbitraire. Valeur hexadécimale : nn ;\unnnn
Valeur Unicode arbitraire. Peut résulter en plusieurs caractères. Identifiant Unicode : U+nnnn ;\Unnnnnnnn
Valeur Unicode arbitraire. Peut résulter en plusieurs caractères. Identifiant Unicode : U+nnnnnnnn.
Ces séquences sont utiles pour la manipulation de fichier et de texte dans la console système de Windows, Linux, etc.
Limites de la norme POSIX
POSIX ne définit aucune façon standard de désigner littéralement des caractères par leur code numérique dans des jeux de caractères à plus de 8 bits (par exemple Unicode). Aussi, nombre d’implémentations de POSIX compatibles Unicode ou ISO/CEI 10646 acceptent aussi les séquences \uNNNN
(où NNNN désigne sur 4 chiffres hexadécimaux le point de code Unicode d’un caractère du plan multingue de base) ou \UNNNNNNNN
(où NNNNNNNN désigne sur 8 chiffres hexadécimaux le point de code Unicode d’un caractère quelconque du jeu).
La norme ne précise pas non plus si les caractères désignés par un code hexadécimal désignent ceux du fichier source, ou si leur code résulte d’un transcodage du jeu de caractères codés d’entrée vers un jeu commun (tel qu’Unicode). Unicode ou le jeu de base ASCII est presque toujours utilisé en tant que codage interne, mais ce n’est pas toujours vrai sur les systèmes à codage basé sur EBCDIC avec les expressions rationnelles POSIX.
De plus, les jeux de caractères sur 8 bits peuvent différer largement notamment dans la zone haute (non ASCII) et l’interprétation des caractères de contrôle (en fonction du système utilisé). Cela constitue un problème d’interopérabilité, qui est résolu le plus souvent en utilisant, dans les utilitaires de traitement de texte, un jeu de caractère interne commun unique basé sur Unicode et un transcodage du jeu de caractères d’entrée vers ce codage interne commun : avec ce système, les expressions rationnelles peuvent devenir indépendantes des jeux de caractères codés utilisés dans différents documents.
Notes et références
- Standard ASCII de 1963, §A.8.1 Control Subset Structure.
- http://alis.isoc.org/codage/registre_ISO.htm
- « Séquences d'échappement », sur cppreference.com (consulté le ).
Annexes
Articles connexes
- Caractère de contrôle
- ASCII
- Unicode
- Time Independent Escape Sequence (en) (TIES), séquence d'échappement utilisée dans les modems pour passer du mode 'data' au mode 'commande'.
- Bit stuffing
Bibliographie
- (en) Joe Smith, Summary of ANSI standards for ASCII terminals, (lire en ligne) (Synthèse des normalisations ANSI applicables aux terminaux)