Comment obtenir la valeur ASCII d'un caractère

Réponses:

1349

D' ici :

La fonction ord () obtiendrait 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'
>>>

En Python 2, il y a aussi la unichrfonction, retournant le caractère Unicode dont l'ordinal est l' unichrargument:

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

Dans Python 3, vous pouvez utiliser à la chrplace de unichr.


ord () - Documentation Python 3.6.5rc1

ord () - Documentation Python 2.7.14

Matt J
la source
quel encodage en chr en utilisant?
njzk2
15
Notez que chr agit également comme unichr dans Python 3. chr(31415) -> '窷'
William
6
@ njzk2: il n'utilise pas de codage de caractères , il renvoie une chaîne d' octets en Python 2. Il appartient à vous de l' interpréter comme un caractère par exemple chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. En Python 3 (ou unichren Python 2), le numéro d'entrée est interprété comme un nombre entier codé Unicode ordinal: unichr(0x439) == '\u0439'(les 256 premiers entiers ont le même mappage que latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1'):, les 128 premiers - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')c'est une chose Unicode, pas Python).
jfs
4
Pourquoi la fonction est-elle appelée "ord"?
eLymar
6
@eLymar: c'est l'abréviation de "ordinal", qui a des racines linguistiques similaires à "ordre" - c'est-à-dire la représentation numérique plutôt que symbolique du personnage
Jacob Krall
167

Notez que ord()cela ne vous donne pas la valeur ASCII en soi; il vous donne la valeur numérique du caractère dans l'encodage quel qu'il soit. Par conséquent, le résultat de ord('ä')peut être 228 si vous utilisez Latin-1, ou il peut augmenter un TypeErrorsi 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
Ignacio Vazquez-Abrams
la source
15
Comment savoir quel encodage vous utilisez dans une situation donnée?
Moustache
1
@Moustache: En Python3, vous utiliserez Unicode prêt à l'emploi.
tricasse
Dépend du type d'objet . Python3 ( str ): unicodepar défaut. Python3 ( octets ): str(b'\xc3\x9c', 'ascii')-> déclenche UnicodeDecodeError . Python3 ( octets ): str(b'\xc3\x9c', 'utf-8')-> renvoie Ü . Vous pouvez également consulter le package six .
nosahama
49

Tu recherches:

ord()
Jacob Krall
la source
37

La réponse acceptée est correcte, mais il existe un moyen plus intelligent / efficace de le faire si vous devez convertir un tas de caractères ASCII en leurs codes ASCII à la fois. Au lieu de faire:

for ch in mystr:
    code = ord(ch)

ou légèrement plus rapide:

for code in map(ord, mystr):

vous convertissez en types natifs Python qui itèrent les codes directement. Sur Python 3, c'est trivial:

for code in mystr.encode('ascii'):

et sur Python 2.6 / 2.7, il n'est que légèrement plus impliqué car il n'a pas d' bytesobjet de style Py3 ( bytesest un alias pour str, qui itère par caractère), mais ils ont 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'):

Le codage en tant que type qui itère nativement par ordinal signifie que la conversion va beaucoup plus vite; dans les tests locaux sur Py2.7 et Py3.5, itérer un strpour obtenir ses codes ASCII en utilisant les map(ord, mystr)démarrages prend environ deux fois plus de temps pour un len10 strque bytearray(mystr)sur Py2 ou mystr.encode('ascii')Py3, et à mesure que le temps strs'allonge, le multiplicateur paie pour les map(ord, mystr)hausses à ~ 6,5x-7x.

Le seul inconvénient est que la conversion est tout à la fois, donc votre premier résultat pourrait prendre un peu plus de temps, et un énorme vraiment straurait un temporaire bytes/ proportionnellement grand bytearray, mais à moins que cela ne vous oblige à la page thrashing, cela ne devrait pas avoir d'importance .

ShadowRanger
la source
3

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

Voici un exemple de code:

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

Production:

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