Guide Unicode · Mis à jour le 20 octobre 2026
Unicode en Python
Traitez le texte sous forme de str. Encodez-le en bytes pour le stockage ou le transfert et décodez avec l’encodage source connu. Exécutez ces exemples avec Python 3.
Trouver un point de code avec ord() et chr()
En Python 3, str représente le texte Unicode. ord() reçoit un point de code et renvoie son entier ; chr() fait l’inverse. Un emoji visible peut contenir plusieurs points de code.
text = "Aé♥"
print([f"U+{ord(char):04X}" for char in text])
# ['U+0041', 'U+00E9', 'U+2665']
print(chr(0x2665))
# ♥Encoder les chaînes et décoder les octets en UTF-8
encode() transforme le texte en octets, decode() les octets en texte. Utilisez l’encodage réel de la source. Par défaut, une entrée invalide déclenche une erreur.
text = "café"
data = text.encode("utf-8")
print(data.hex(" "))
# 63 61 66 c3 a9
print(data.decode("utf-8"))
# café
assert data.decode("utf-8") == textDistinguer les échappements du texte littéral
Python interprète les échappements Unicode dans les chaînes normales. Les chaînes raw conservent les barres obliques inverses. Un échappement dans une représentation ne signifie pas forcément que le texte contient une telle barre.
heart = "\u2665"
literal = r"\u2665"
print(heart, len(heart))
# ♥ 1
print(literal, len(literal))
# \u2665 6
assert heart == "♥"Normaliser les textes équivalents avant comparaison
Un caractère précomposé et une lettre avec marque combinatoire peuvent sembler identiques. NFC normalise les séquences canoniquement équivalentes ; cela ne traduit pas et ne retire pas les accents.
import unicodedata
composed = "é"
decomposed = "e\u0301"
print(composed == decomposed)
# False
print(unicodedata.normalize("NFC", decomposed) == composed)
# TrueÉviter les erreurs d’encodage courantes
- Précisez encoding="utf-8" pour les fichiers UTF-8 et vérifiez l’encodage source des anciens documents.
- N’utilisez pas errors="ignore" comme solution générale : cela supprime des données sans avertir. Gérez les erreurs explicitement.
- len() compte les points de code d’un str, pas les caractères visibles. Marques combinatoires et emojis peuvent en contenir plusieurs.
- ASCII ne peut pas encoder tout Unicode. Le remplacement et la translittération modifient le contenu.