2008-10-22 23 views

Respuesta

950

De here:

función ord() obtendría el valor int del carbón. Y en caso de que desee convertir de nuevo después de jugar con el número , la función chr() hace el truco.

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

En Python 2, existe también la función unichr, volviendo el carácter Unicode cuyo ordinal es la unichr argumento:

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

En Python 3 se puede utilizar en lugar de chrunichr.

+0

qué codificación en chr usar? – njzk2

+0

@ njzk2: 'latin1' (que no es una cosa brillante que hacer si su byte original estaba codificado en (por ejemplo)' cp1251' (cirílico) –

+13

Tenga en cuenta que chr también actúa como unichr en Python 3. 'chr (31415) -> '窷' '' – William

38

Usted ha buscado:

ord() 
134

Tenga en cuenta que ord() no le da el valor ASCII per se; te da el valor numérico del personaje en cualquier codificación en la que esté. Por lo tanto, el resultado de ord ('ä') puede ser 228 si estás usando Latin-1, o puede generar un TypeError si estás usando UTF- 8. Incluso puede devolver el punto de código Unicode en su lugar si se le pasa un Unicode:

>>> ord(u'あ') 
12354 
+6

¿Cómo puede saber qué codificación está usando en una situación dada? – Moustache

12

La respuesta aceptada es correcta, pero hay una manera más inteligente/eficiente de hacer esto si usted necesita para convertir un montón de ASCII caracteres a sus códigos ASCII a la vez. En vez de hacer:

for ch in mystr: 
    code = ord(ch) 

o ligeramente más rápido:

for code in map(ord, mystr): 

a convertir a los tipos nativos de Python que iteran directamente los códigos. En Python 3, es trivial:

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

y en Python 2.6/2.7, que es sólo un poco más complicado, ya que no tiene un estilo bytes objeto AP3 (bytes es un alias para str, que itera por carácter) , pero tienen 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'): 

codificación como un tipo que de forma nativa itera por ordinal significa la conversión va mucho más rápido; en las pruebas locales en los dos Py2.7 y Py3.5, se repite una str para obtener sus códigos ASCII usando map(ord, mystr) parte de tomar el doble de tiempo para una que el uso de bytearray(mystr) en Py2 o mystr.encode('ascii') en el AP3, y como el str obtiene más tiempo, el multiplicador pagado por map(ord, mystr) se eleva a ~ 6.5x-7x.

El único inconveniente es que la conversión es a la vez, por lo que su primer resultado podría tardar un poco más, y una verdaderamente enorme str tendría un proporcionalmente grande temporal bytes/bytearray, pero a menos que esto le obliga a la página golear, esto no es probable que importe.

Cuestiones relacionadas