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
.
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 \xHh
où H
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 :
# Tests
(insensible à la casse)(Ctrl+I)
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.
# Tests
(insensible à la casse)(Ctrl+I)