Comment puis-je obtenir le ASCII d'un caractère en tant que int
sur Python ?
Quel est l'encodage utilisé par le chr ?
De ici :
La fonction
ord()
obtient la valeur int du caractère. Et au cas où vous voudriez reconvertir après avoir joué avec le nombre, la fonctionchr()
fait l'affaire.ord('a') 97 chr(97) 'a' chr(ord('a') + 3) 'd'
Dans Python 2, il existait également la fonction unichr
qui renvoie la fonction Unicode dont l'ordinal est le unichr
argument :
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
En Python 3, vous pouvez utiliser chr
au lieu de unichr
.
@njzk2 : latin1
(ce qui n'est pas une chose brillante à faire si votre octet original était codé en (disons) cp1251
(Cyrillique)
Notez que ord()
ne vous donne pas la valeur ASCII en tant que telle ; il vous donne la valeur numérique du caractère, quel que soit son encodage. Par conséquent, le résultat de ord('ä')
peut être de 228 si vous utilisez le Latin-1, ou il peut soulever un TypeError
si vous utilisez UTF-8. Il peut même retourner le point de code Unicode à la place si vous lui passez un unicode :
>>> ord(u'')
12354
Cela dépend de la type d'objet . Python3 ( str ) : unicode
par défaut. Python3 ( octets ) : str(b'\xc3\x9c', 'ascii')
-> soulève Erreur UnicodeDecodeError . Python3 ( octets ) : str(b'\xc3\x9c', 'utf-8')
-> retours Ü . Vous pouvez également vous renseigner sur le six paquet.
La réponse acceptée est correcte, mais il existe une manière plus intelligente/efficace de le faire si vous devez convertir tout un tas de caractères ASCII en leurs codes ASCII en une seule fois. Au lieu de le faire :
for ch in mystr:
code = ord(ch)
ou le légèrement plus rapide :
for code in map(ord, mystr):
vous convertissez en types natifs Python qui itèrent directement les codes. Sur Python 3, c'est trivial :
for code in mystr.encode('ascii'):
et sur Python 2.6/2.7, c'est seulement un peu plus compliqué car il n'y a pas de style Py3. bytes
objet ( bytes
est un alias pour str
qui itère par caractère), mais ils disposent de bytearray
:
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
L'encodage sous la forme d'un type qui itère nativement par ordinal signifie que la conversion est beaucoup plus rapide ; dans les tests locaux effectués à la fois sur Py2.7 et Py3.5, l'itération d'un type str
pour obtenir ses codes ASCII en utilisant map(ord, mystr)
commence à prendre environ deux fois plus de temps pour un len
10 str
que d'utiliser bytearray(mystr)
sur Py2 ou mystr.encode('ascii')
sur Py3, et comme le str
s'allonge, le multiplicateur payé pour map(ord, mystr)
passe à ~6,5x-7x.
Le seul inconvénient est que la conversion se fait en une seule fois, ce qui fait que votre premier résultat peut prendre un peu plus de temps, et qu'un résultat vraiment énorme str
aurait un impact temporaire proportionnellement important bytes
/ bytearray
mais, à moins que cela ne vous oblige à faire du battage de pages, cela ne devrait pas avoir d'importance.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.