1039
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 unichr
fonction, retournant le caractère Unicode dont l'ordinal est l' unichr
argument:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Dans Python 3, vous pouvez utiliser à la chr
place de unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. En Python 3 (ouunichr
en 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-1unichr(0xe9) == b'\xe9'.decode('latin-1')
:, les 128 premiers - ascii:unichr(0x0a) == b'\x0a'.decode('ascii')
c'est une chose Unicode, pas Python).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 deord('ä')
peut être 228 si vous utilisez Latin-1, ou il peut augmenter unTypeError
si vous utilisez UTF-8. Il peut même retourner le point de code Unicode à la place si vous lui passez un unicode:la source
unicode
par 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 .Tu recherches:
la source
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:
ou légèrement plus rapide:
vous convertissez en types natifs Python qui itèrent les codes directement. Sur Python 3, c'est trivial:
et sur Python 2.6 / 2.7, il n'est que légèrement plus impliqué car il n'a pas d'
bytes
objet de style Py3 (bytes
est un alias pourstr
, qui itère par caractère), mais ils ontbytearray
: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
str
pour obtenir ses codes ASCII en utilisant lesmap(ord, mystr)
démarrages prend environ deux fois plus de temps pour unlen
10str
quebytearray(mystr)
sur Py2 oumystr.encode('ascii')
Py3, et à mesure que le tempsstr
s'allonge, le multiplicateur paie pour lesmap(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
str
aurait un temporairebytes
/ proportionnellement grandbytearray
, mais à moins que cela ne vous oblige à la page thrashing, cela ne devrait pas avoir d'importance .la source
Pour obtenir le code ASCII d'un caractère, vous pouvez utiliser la
ord()
fonction.Voici un exemple de code:
Production:
la source