Encodage de texte avec Python
encode() et decode()
Ces 2 fonctions sont utilisées pour passer du texte manipulable par un humain aux données binaires utilisées dans les fichiers, les communications réseau, ou le stockage, en respectant les règles d’encodage des caractères.
Exemple de décodage (octets → chaînes)
codages = (
# ASCII
b'\x4c\x65\x20\x6b\x61\x77\x61\x20\x65\x73\x74\x20\x61\x20\x2b\x2f\x2d\x32\x20\x65\x75\x72\x6f\x73\x20\x21\x20\x3A\x2d\x28'
# LATIN9 (ISO8859-15) -> symboles '€'
,b'\x4c\x65\x20\x63\x61\x66\xe9\x20\x65\x73\x74\x20\xe0\x20\xb1\x32\x20\xa4\x20\x21\x20\x3f\x20'
# UTF8 -> symboles '±' , '€'(U+20AC), '☹'(U+2639)
,b'\x4c\x65\x20\x63\x61\x66\xc3\xa9\x20\x65\x73\x74\x20\xc3\xa0\x20\xc2\xb1\x32\x20\xe2\x82\xac\x20\x21\x20\xe2\x98\xb9'
)
for octets in codages :
print('Le décodage de', ' '.join(f'{o:#02x}' for o in octets), "vaut : ")
try :
chaineUTF8 = octets.decode("utf8")
print(f"* UTF8 : {chaineUTF8}")
except UnicodeDecodeError :
print(f"* UTF8 : --")
try :
chaineASCII = octets.decode("ascii")
print(f"* ASCII : {chaineASCII}")
except :
print("* ASCII : --")
try :
chaineLATIN1 = octets.decode("latin1") # latin1 = ISO8859-1
print(f"* LATIN1 : {chaineLATIN1}")
except UnicodeDecodeError :
print("* LATIN1 : --")
try :
chaineLATIN9 = octets.decode("latin9") # latin = ISO8859-15
print(f"* LATIN9 : {chaineLATIN9}")
except UnicodeDecodeError :
print("* LATIN9 : --")
Ce code affiche :
Le décodage de codages[ 0 ] vaut :
* UTF8 : Le kawa est a +/-2 euros ! :-(
* ASCII : Le kawa est a +/-2 euros ! :-(
* LATIN1 : Le kawa est a +/-2 euros ! :-(
* LATIN9 : Le kawa est a +/-2 euros ! :-(
Le décodage de codages[ 1 ] vaut :
* UTF8 : --
* ASCII : --
* LATIN1 : Le café est à ±2 ¤ ! ?
* LATIN9 : Le café est à ±2 € ! ?
Le décodage de codages[ 2 ] vaut :
* UTF8 : Le café est à ±2 € ! ☹
* ASCII : --
* LATIN1 : Le café est à ±2 ⬠! â¹
* LATIN9 : Le café est à ±2 ⬠! â¹
🞄 🞄 🞄