Skip to content

Convertir un point de code Unicode et un caractère en un autre (chr, ord)

En Python, les fonctions intégrées chr() et ord() sont utilisées pour convertir entre les points de code Unicode et les caractères.

Un caractère peut également être représenté en écrivant un point de code Unicode hexadécimal avec x, u ou U dans un littéral de chaîne.

Cet article décrit le contenu suivant.

  • Convertissez le caractère en point de code Unicode :ord()
  • Convertissez le point de code Unicode en caractère :chr()
  • Utilisez des points de code Unicode dans les chaînes :x, u, U

Convertissez le caractère en point de code Unicode :ord()

En spécifiant une chaîne d’un caractère comme argument de ord(), le point de code Unicode du caractère est renvoyé sous la forme d’un entier int.

i = ord('A')
print(i)
# 65

print(type(i))
# <class 'int'>

Une erreur se produit si vous spécifiez une chaîne de plus de deux caractères.

# ord('abc')
# TypeError: ord() expected a character, but string of length 3 found

Les points de code Unicode sont souvent écrits en notation hexadécimale. Utilisez la fonction intégrée hex() pour convertir un entier en une chaîne hexadécimale.

s = hex(i)
print(s)
# 0x41

print(type(s))
# <class 'str'>

La fonction intégrée format() peut être utilisée pour spécifier un formatage plus détaillé, comme le remplissage par des zéros et le préfixe 0x.

print(format(i, '04x'))
# 0041

print(format(i, '#06x'))
# 0x0041

En résumé, le point de code hexadécimal Unicode pour un caractère particulier peut être obtenu comme suit.

print(format(ord('X'), '#08x'))
# 0x000058

print(format(ord('💯'), '#08x'))
# 0x01f4af

Les drapeaux et autres emoji sont représentés par plusieurs points de code Unicode.

Notez qu’à partir de Python 3.7.3, ord() ne prend pas en charge ces emoji et une erreur se produit. Si vous vérifiez le nombre de caractères de ces emoji avec la fonction intégrée len(), le nombre de points de code Unicode est renvoyé.

# ord('🇯🇵')
# TypeError: ord() expected a character, but string of length 2 found

print(len('🇯🇵'))
# 2

Convertissez le point de code Unicode en caractère :chr()

chr() renvoie la chaîne str représentant un caractère dont le point de code Unicode est l’entier spécifié int.

print(chr(65))
# A

print(type(chr(65)))
# <class 'str'>

En Python, un entier peut être écrit en hexadécimal avec 0x, vous pouvez donc le spécifier comme argument de chr(). Peu importe qu’il soit rempli de zéros.

print(65 == 0x41)
# True

print(chr(0x41))
# A

print(chr(0x000041))
# A

Si vous souhaitez convertir une chaîne hexadécimale représentant un point de code Unicode en un caractère, convertissez la chaîne en entier, puis transmettez-la à chr().

Utilisez int() pour convertir une chaîne hexadécimale en entier. Spécifiez la base 16 comme deuxième argument.

s = '0x0041'

print(int(s, 16))
# 65

print(chr(int(s, 16)))
# A

Le deuxième argument peut être 0 si la chaîne est préfixée par 0x. Consultez l’article suivant pour plus de détails sur la gestion des nombres hexadécimaux et des chaînes.

Les points de code Unicode sont souvent écrits sous la forme U+XXXX. Pour convertir une telle chaîne en un caractère de ce point de code, sélectionnez simplement la partie numérique de la chaîne avec la tranche.

s = 'U+0041'

print(s[2:])
# 0041

print(chr(int(s[2:], 16)))
# A

Utilisez des points de code Unicode dans les chaînes :x, u, U

Si vous écrivez x, u ou U et un point de code Unicode hexadécimal dans un littéral de chaîne, il est traité comme ce caractère.

Il doit être composé de 2, 4 ou 8 chiffres comme xXX, uXXXX et UXXXXXX, respectivement. Une erreur est levée si le nombre de chiffres n’est pas correct.

print('x41')
# A

print('u0041')
# A

print('U00000041')
# A

print('U0001f4af')
# 💯

# print('u041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated uXXXX escape

# print('U0000041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-8: truncated UXXXXXXXX escape

Chaque code est traité comme un caractère. Vous pouvez le vérifier avec la fonction intégrée len() qui renvoie le nombre de caractères.

print('u0041u0042u0043')
# ABC

print(len('u0041u0042u0043'))
# 3

Notez que dans les chaînes brutes où les séquences d’échappement sont désactivées, la chaîne est traitée telle quelle.

print(r'u0041u0042u0043')
# u0041u0042u0043

print(len(r'u0041u0042u0043'))
# 18