1236 votes

Comment obtenir la valeur ASCII d'un caractère ?

Comment puis-je obtenir le ASCII d'un caractère en tant que int sur Python ?

1633voto

Matt J Points 15475

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 fonction chr() 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 .


ord() - Documentation Python 3.6.5rc1

ord() - Documentation Python 2.7.14

0 votes

Quel est l'encodage utilisé par le chr ?

0 votes

@njzk2 : latin1 (ce qui n'est pas une chose brillante à faire si votre octet original était codé en (disons) cp1251 (Cyrillique)

20 votes

Notez que chr agit également comme unichr dans Python 3. chr(31415) -> ''

183voto

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

17 votes

Comment savoir quel encodage vous utilisez dans une situation donnée ?

3 votes

@Moustache : Dans Python3, vous utiliserez Unicode dès la sortie de la boîte.

2 votes

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.

60voto

Jacob Krall Points 10327

Vous êtes à la recherche de :

ord()

43voto

ShadowRanger Points 44

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.

5voto

Upz Points 181

Pour obtenir le code ASCII d'un caractère, vous pouvez utiliser la fonction ord() fonction.

Voici un exemple de code :

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

Sortie :

Your value here: qwerty
[113, 119, 101, 114, 116, 121]

Prograide.com

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.

Powered by:

X