Come ottenere il valore ASCII di un personaggio


Risposte:


1349

Da qui :

La funzione ord () otterrebbe il valore int del carattere. E nel caso tu voglia tornare indietro dopo aver giocato con il numero, la funzione chr () fa il trucco.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

In Python 2, c'è anche la unichrfunzione, che restituisce il carattere Unicode il cui ordinale è l' unichrargomento:

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

In Python 3 puoi usare chrinvece di unichr.


ord () - Documentazione di Python 3.6.5rc1

ord () - Documentazione di Python 2.7.14


quale codifica in chr utilizza?
njzk2,

15
Notare che chr agisce anche come unichr in Python 3. chr(31415) -> '窷'
William

6
@ njzk2: non usa alcuna codifica dei caratteri, ma restituisce un bytestring in Python 2. Spetta a te interpretarlo come un personaggio, ad es chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. In Python 3 (o unichrin Python 2), il numero di input viene interpretato come numero intero di punti di codice Unicode ordinale: unichr(0x439) == '\u0439'(i primi 256 numeri interi hanno la stessa mappatura di latino-1 unichr(0xe9) == b'\xe9'.decode('latin-1'):, i primi 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')è una cosa Unicode, non Pitone).
jfs,

4
Perché la funzione si chiama "ord"?
eLymar,

6
@eLymar: è l'abbreviazione di "ordinale", che ha radici linguistiche simili all '"ordine" - ovvero la rappresentazione numerica piuttosto che simbolica del personaggio
Jacob Krall

167

Nota che ord()non ti dà il valore ASCII in sé; ti dà il valore numerico del personaggio in qualunque codifica sia. Pertanto il risultato di ord('ä')può essere 228 se stai usando Latin-1, oppure può aumentare a TypeErrorse stai usando UTF-8. Può anche restituire il punto di codice Unicode invece se gli passi un unicode:

>>> ord(u'あ')
12354

15
Come puoi scoprire quale codifica stai utilizzando in una determinata situazione?
Moustache,

1
@Moustache: in Python3, utilizzerai Unicode immediatamente.
tricasse

Dipende dal tipo di oggetto . Python3 ( str ): unicodeper impostazione predefinita. Python3 ( byte ): str(b'\xc3\x9c', 'ascii')-> genera UnicodeDecodeError . Python3 ( byte ): str(b'\xc3\x9c', 'utf-8')-> restituisce Ü . Puoi anche guardare nel pacchetto sei .
nosahama,


37

La risposta accettata è corretta, ma esiste un modo più intelligente / efficiente per farlo se è necessario convertire contemporaneamente un intero gruppo di caratteri ASCII nei loro codici ASCII. Invece di fare:

for ch in mystr:
    code = ord(ch)

o leggermente più veloce:

for code in map(ord, mystr):

converti in tipi nativi di Python che ripetono direttamente i codici. Su Python 3, è banale:

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

e su Python 2.6 / 2.7, è solo leggermente più coinvolto perché non ha un bytesoggetto in stile Py3 ( bytesè un alias per str, che scorre per carattere), ma hanno 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'):

La codifica come un tipo che itera in modo nativo per ordinale significa che la conversione procede molto più velocemente; nei test locali su Py2.7 e Py3.5, l'iterazione di a strper ottenere i suoi codici ASCII usando map(ord, mystr)inizia prendendo circa il doppio del tempo per un len10 strrispetto all'utilizzo bytearray(mystr)su Py2 o mystr.encode('ascii')su Py3 e, man mano che strsi allunga, il moltiplicatore paga per gli map(ord, mystr)aumenti a ~ 6.5x-7x.

L'unico aspetto negativo è che la conversione è tutta in una volta, quindi il tuo primo risultato potrebbe richiedere un po 'più di tempo, e un enorme davvero stravrebbe un temporaneo proporzionalmente grande bytes/ bytearray, ma a meno che ciò non ti costringa a sfogliare le pagine, questo non è probabilmente importante .


3

Per ottenere il codice ASCII di un carattere, è possibile utilizzare la ord()funzione.

Ecco un esempio di codice:

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

Produzione:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.