Python ord() - comprendre les codes Unicode

Denis Ribeiro .

24 octobre 2026

Tableau ASCII montrant les correspondances décimales, hexadécimales, octales et caractères. Un outil essentiel pour comprendre le codage des caractères, comme ceux utilisés en ord python.

Un caractère peut sembler être une simple lettre à l’écran, mais Python le représente aussi par un nombre Unicode. La fonction ord() permet d’obtenir ce point de code, y compris pour les accents, les symboles et de nombreux caractères non latins. Je détaille ici son fonctionnement, ses limites, son lien avec chr() et les erreurs fréquentes liées aux chaînes Unicode.

Les repères à retenir pour utiliser ord()

  • ord() transforme un caractère unique en nombre Unicode.
  • Un seul caractère doit être fourni, sinon Python déclenche une erreur.
  • ord("é") renvoie 233, car Python travaille avec Unicode et pas seulement avec ASCII.
  • chr() réalise l’opération inverse en recréant un caractère à partir de son code.
  • Un caractère visuel peut être composé de plusieurs points de code, notamment avec certains emojis.

Comprendre le rôle de ord() en Python

La syntaxe est très courte. On passe à ord() une chaîne contenant un seul caractère, puis la fonction renvoie son point de code Unicode sous forme d’un entier.

print(ord("A"))
print(ord("a"))
print(ord("€"))
65
97
8364

La différence entre "A" et "a" n’est donc pas seulement visuelle. Leurs codes respectifs sont 65 et 97, ce qui permet par exemple de comparer des caractères ou de comprendre certains mécanismes de tri et de validation.

Je conseille de retenir une règle simple. ord() ne convertit pas un mot entier en nombre et ne calcule pas une valeur ASCII universelle. Il lit un élément de texte précis et renvoie la valeur Unicode associée.

lettre = "B"
code = ord(lettre)

print(code)
print(type(code))

Le résultat est un objet de type int. Pour vérifier le même code sous forme hexadécimale, une conversion avec hex() est pratique.

print(ord("€"))
print(hex(ord("€")))
8364
0x20ac

Utiliser ord() avec les accents et Unicode

ASCII ne couvre qu’un ensemble limité de caractères, principalement les lettres anglaises, les chiffres et quelques symboles. En Python 3, les chaînes de type str utilisent Unicode, ce qui permet à ord() de traiter directement é, ç, œ, €, Ω ou 中.

caracteres = ["é", "ç", "œ", "€", "Ω", "中"]

for caractere in caracteres:
    print(caractere, ord(caractere), hex(ord(caractere)))

Cette approche est utile pour diagnostiquer un texte mal affiché, repérer un caractère inattendu ou comprendre une donnée provenant d’un fichier. Personnellement, j’utilise souvent l’affichage en hexadécimal lorsqu’un texte semble identique à l’œil mais produit pourtant un résultat différent dans un programme.

On peut aussi parcourir une chaîne et récupérer le code de chaque caractère. La fonction enumerate() conserve en plus la position dans le texte.

mot = "été"

for position, caractere in enumerate(mot):
    print(position, caractere, ord(caractere))
0 é 233
1 t 116
2 é 233

Il faut toutefois distinguer le caractère affiché de sa représentation interne. Le symbole é peut être écrit comme un caractère précomposé ou comme la lettre e suivie d’un accent combiné. Visuellement, le résultat est similaire, mais les points de code ne sont pas les mêmes.

print(len("é"))
print(len("e\u0301"))
1
2

Infographie Python Pool expliquant la fonction `ord` : un caractère devient un point de code Unicode, puis un entier.

Ne pas confondre caractère, octet et encodage

Une source fréquente de confusion vient de la différence entre une chaîne Unicode et une suite d’octets. Une chaîne str représente du texte, tandis qu’un objet bytes contient des valeurs binaires utilisées lors de la lecture ou de l’écriture de fichiers et de communications réseau.

Élément Exemple Signification
Chaîne Unicode "é" Un caractère textuel dont le point de code est U+00E9
Octets UTF-8 b"\xc3\xa9" Deux octets représentant é en UTF-8
Octet isolé b"\xc3" Une valeur binaire, pas le caractère é complet

Avec une chaîne Unicode, ord("é") renvoie 233. Après encodage en UTF-8, le même caractère devient deux octets, 195 et 169. Ces nombres décrivent l’encodage binaire, pas directement le point de code Unicode du caractère.

texte = "é"
octets = texte.encode("utf-8")

print(ord(texte))
print(octets)
print(list(octets))
233
b'\xc3\xa9'
[195, 169]

Dans la pratique, je vérifie toujours le type de la donnée avant d’utiliser ord(). Si elle vient d’un fichier ou d’une requête réseau, il faut souvent la décoder d’abord.

donnees = b"\xc3\xa9"
texte = donnees.decode("utf-8")

print(texte)
print(ord(texte))

Cette étape évite une erreur classique. Encoder transforme du texte en octets, tandis que décoder transforme des octets en texte. Mélanger ces deux opérations peut produire des caractères illisibles ou des exceptions de décodage.

Revenir du code Unicode au caractère avec chr()

chr() est le complément naturel de ord(). Elle reçoit un entier et renvoie le caractère correspondant, ce qui permet de reconstruire une chaîne ou de vérifier qu’une conversion est correcte.

code = ord("€")
caractere = chr(code)

print(code)
print(caractere)
8364
€

La relation peut se résumer ainsi. ord(caractere) produit un nombre, tandis que chr(nombre) produit un caractère.

for caractere in "Python":
    code = ord(caractere)
    print(caractere, code, chr(code))

La valeur fournie à chr() doit se trouver dans l’intervalle Unicode valide, de 0 à 0x10FFFF. Une valeur négative ou trop élevée déclenche une ValueError.

print(chr(65))
print(chr(0x1F600))
A
😀

Cette conversion est utile pour générer des symboles, manipuler des alphabets ou tester des caractères dans un script. Elle ne remplace cependant pas une vraie gestion de la langue. Construire du texte uniquement à partir de nombres devient vite difficile à maintenir.

Les erreurs fréquentes avec ord()

Passer une chaîne trop longue

L’erreur la plus courante apparaît lorsqu’on fournit plusieurs caractères. Python ne sait pas quel élément convertir et signale que la chaîne ne contient pas un caractère unique.

ord("Python")
TypeError: ord() expected a character, but string of length 6 found

Pour analyser chaque caractère, il faut parcourir la chaîne ou sélectionner une position précise.

texte = "Python"

for caractere in texte:
    print(ord(caractere))

print(ord(texte[0]))

Passer une chaîne vide

Une chaîne vide ne contient aucun caractère, donc elle provoque également une erreur. Ce cas arrive souvent lorsqu’une valeur provient d’une saisie utilisateur ou d’un fichier vide.

valeur = ""

if valeur:
    print(ord(valeur[0]))
else:
    print("Aucun caractère à analyser")

Ce contrôle simple évite de traiter une donnée inexistante. Dans un programme plus robuste, je vérifie aussi que la valeur reçue est bien une chaîne et non None ou un nombre.

Lire aussi : Python str.replace - Maîtrisez le remplacement de sous-chaînes

Oublier les caractères composés

Un emoji ou un symbole visuel peut être formé de plusieurs points de code. Le drapeau français "🇫🇷", par exemple, combine deux indicateurs régionaux. Il ne peut donc pas être envoyé directement à ord().

drapeau = "🇫🇷"

for caractere in drapeau:
    print(hex(ord(caractere)))

Le même phénomène concerne les accents combinés et les séquences avec jointure zéro, fréquentes dans les emojis. Quand l’objectif est d’analyser ce que l’utilisateur perçoit comme un symbole unique, ord() seul ne suffit pas toujours. Il faut alors raisonner en grappes de graphèmes, c’est-à-dire en unités visuelles complètes.

Des usages pratiques pour inspecter et valider du texte

La fonction peut servir à vérifier qu’un caractère appartient à une plage donnée. Les lettres majuscules latines correspondent aux codes 65 à 90, mais je préfère généralement les méthodes comme isupper() lorsqu’il s’agit de gérer correctement plusieurs alphabets.

caractere = "G"

if 65 <= ord(caractere) <= 90:
    print("Majuscule latine")
else:
    print("Autre caractère")

Pour diagnostiquer des espaces invisibles, l’affichage du code Unicode est particulièrement efficace. Un espace classique, une espace insécable et une tabulation peuvent se ressembler dans un texte, tout en ayant des valeurs différentes.

texte = "A\u00a0B\tC"

for caractere in texte:
    print(repr(caractere), hex(ord(caractere)))

Je recommande aussi d’associer ord() au module unicodedata lorsque l’identification doit être lisible par un humain. Le nom Unicode explique mieux un caractère que son seul nombre.

import unicodedata

caractere = "€"

print(hex(ord(caractere)))
print(unicodedata.name(caractere))
0x20ac
EURO SIGN

Enfin, pour comparer des caractères ou contrôler une entrée, il vaut mieux ne pas utiliser aveuglément leur code numérique. Les méthodes comme isalpha(), isdigit() et casefold() prennent davantage en compte les règles Unicode. ord() est excellent pour inspecter et comprendre, mais ce n’est pas toujours le meilleur outil pour appliquer une règle linguistique.

Ce que révèle réellement un code Unicode

La fonction ord() donne une réponse directe à une question précise. Elle indique le point de code Unicode associé à un caractère unique, qu’il s’agisse d’une lettre française, d’un symbole monétaire ou d’un caractère international.

Pour éviter les pièges, je retiens trois réflexes. Je vérifie que la chaîne contient bien un seul élément, je distingue toujours texte et octets, puis j’utilise chr() pour tester le chemin inverse. Cette méthode suffit dans la majorité des scripts Python et rend les problèmes d’encodage beaucoup plus faciles à localiser.

Questions fréquentes

La fonction renvoie le point de code Unicode sous forme d’un entier. Par exemple, ord("é") renvoie 233, tandis que ord("€") renvoie 8364.
ord() accepte uniquement une chaîne contenant un seul caractère. Une chaîne comme "Python" provoque une TypeError, et une chaîne vide provoque aussi une erreur. Pour traiter un mot, parcourez-le caractère par caractère ou sélectionnez une position précise.
ord("é") renvoie le point de code Unicode 233. Après encodage en UTF-8, é devient les octets 195 et 169 : ces valeurs décrivent l’encodage binaire, pas directement le point de code Unicode.
chr() réalise l’opération inverse de ord() : chr(ord("€")) recrée le caractère €. Un symbole visuel comme le drapeau français peut toutefois contenir plusieurs points de code et doit être parcouru élément par élément ; pour analyser une unité visuelle complète, il faut tenir compte des grappes de graphèmes.
Évaluer l'article

Moyenne: 0.0 / 5 · 0 évaluations

Tags

unicode encodage graphèmes caractères composés
Autor Denis Ribeiro
Denis Ribeiro
Je m'appelle Denis Ribeiro et j'ai quatre ans d'expérience dans le domaine de la technologie, en particulier dans les domaines du web, de l'intelligence artificielle, des réseaux et de la sécurité. Mon intérêt pour ces sujets a commencé dès mon plus jeune âge, lorsque j'ai découvert à quel point la technologie pouvait transformer notre quotidien. J'aime expliquer des concepts complexes de manière simple, afin d'aider mes lecteurs à mieux comprendre les enjeux actuels et futurs de notre monde numérique. Dans mes écrits, je m'efforce de fournir des informations utiles, précises et à jour. Je prends le temps de vérifier mes sources et de comparer les informations, tout en suivant les dernières tendances du secteur. Mon objectif est de rendre l'apprentissage accessible à tous, en organisant mes connaissances de manière claire et structurée, afin que chacun puisse naviguer avec confiance dans cet univers en constante évolution.
Commentaires (0)
Ajouter un commentaire