Aller au contenu

Le codage ASCII⚓︎

Python et l'ASCII

Python utilise un encodage des caractères compatible avec le code ASCII pour les caractères de base. Il est possible d'obtenir le numéro associé à chaque caractère ou au contraire d'obtenir le caractère à partir du numéro.

>>> ord("a")
97
>>> chr(97)
'a'

Les fonctions suivantes permettent de transformer un texte en liste de codes ASCII et réciproquement :

def encodage(texte):
    return [ord(c) for c in texte]

def decodage(liste):
    return "".join([chr(n) for n in liste])
La méthode join

La méthode join permet de transformer une liste de textes en un texte. Chacun des éléments de la liste sont séparés par un texte donné. Ainsi SEPARATEUR.join(LISTE) renverra un texte correspondant à chaque élément de LISTE séparés par le texte SEPARATEUR.

>>> ", ".join(["a", "b", "c"])
'a, b, c'
>>> "".join(["a", "b", "c"])
'abc'
>>> " | ".join(["a", "b", "c"])
'a | b | c'

Vous pouvez utiliser ces fonctions dans tous les exercices suivants.

Exercice 1

En utilisant les fonctions présentées ci-dessus, décodez message.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : /∞

La représentation hexadécimale des textes

Les codes ASCII sont souvent donnés en hexadécimal. Python peut afficher et manipuler ces représentations :

>>> hex(ord("b"))
'0x62'
>>> chr(0x62)
'b'

On peut remarquer qu'un nombre peut être écrit en décimal en rajoutant 0x devant :

>>> 0x476
1142
>>> 0xfa
250
>>> 0xff
255
>>> 0xa
10

Les symboles peuvent être directement remplacés par leur code en hexadécimal avec la notation \xHhH et h sont deux chiffres en hexadécimal :

>>> "J\x27ai\x20faim\x2E"
"J'ai faim."
>>> len("\x62")
1

On peut voir qu'un caractère en hexadécimal a bien une longueur de 1, même si on doit le représenter avec 4 caractères.

Les caractères spéciaux

Pour que Python sache qu'un texte correspond à un code en hexadécimal, on utilise \x. Le symbole \ est ce qu'on appelle un caractère d'échappement. Lorsque Python le voit, il sait qu'il faut faire attention à ce qui suit et ne pas le traiter comme n'importe quel texte. Dans cet exemple, \x permet de savoir que les deux symboles suivants seront des chiffres en base 16 et qu'il faudra remplacer le tout par le caractère correspondant.

Il existe de nombreux caractères spéciaux qui ont des effets divers. En voici quelques uns qui correspondent à certains caractères de la table ASCII :

Caractère spécial Nom Explication
\a BEL bip du haut parleur de l'ordinateur
\b BS suppression du dernier caractère
\r CR retour chariot (retour au début de la ligne)
\n LF nouvelle ligne
\t HT tabulation horizontale
\\ pour afficher \
\' pour afficher '
\" pour afficher "

Le son du bip ne fonctionne que sous certains interpréteurs, ce qui n'est pas le cas des IDE intégrés au site ou de Thonny.

Pour que ces symboles soit interprétés, il faut utiliser print.

>>> "bonjour\nlesgens"
'bonjour\nlesgens'
>>> print("bonjour\nlesgens")
bonjour
lesgens
Exercice 2

Exécuter le programme suivant et expliquer ce qui se passe :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : /∞

Solution

On obtient le texte suivant :

 cela cest bizarre
 qui     m'arrive

L'affichage se fait en une seule fois, mais nous allons détailler les étapes de sa construction. La flèche sur la dernière ligne indique la position du curseur où va se mettre le symbole suivant.

Houla c'

Au début, le texte s'affiche sans problème.

Houla c'

On revient en arrière d'un symbole. Cela ne se voit pas, mais le prochain symbole afficher sera sur le '.

Houla cest bizarre

est bizarre s'affiche en remplaçant '.

Houla cest bizarre

On revient au début de la ligne avec \r.

 cela cest bizarre

On affiche ce en début de ligne (il y a un espace au début).

 cela cest bizarre


On va à la ligne suivante avec \n.

 cela cest bizarre
 qui

On affiche qui (il y a un espace au début).

 cela cest bizarre
 qui

On met une tabulation avec \t, ce qui place assez d'espaces pour avoir un multiple de 8 symboles sur la ligne. Dans ce cas, il en manque 4.

 cela cest bizarre
 qui     m'arrive

On affiche m'arrive (il y a un espace au début).

 cela cest bizarre
 qui     m'arrive

Si l'interpréteur le permet, \a provoque un bip sonore.