Séquence d'échappement

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

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).

Histoire[modifier | modifier le code]

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].

Application[modifier | modifier le code]

Cette technologie est utilisée dans différents contextes ; en particulier :

Il existe au moins 157 codage 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 de Windows, Linuxetc.

Limites de la norme POSIX[modifier | modifier le code]

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 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.

Références[modifier | modifier le code]

Annexes[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

  • (en) Joe Smith, Summary of ANSI standards for ASCII terminals, (lire en ligne) (Synthèse des normalisations ANSI applicables aux terminaux)