Cómo obtener el valor ASCII de un personaje

Respuestas:

1349

Desde aquí :

La función ord () obtendría el valor int del char. Y en caso de que desee volver a convertir 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, también existe la unichrfunción, que devuelve el carácter Unicode cuyo ordinal es el unichrargumento:

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

En Python 3 puedes usar en chrlugar de unichr.


ord () - Documentación de Python 3.6.5rc1

ord () - Documentación de Python 2.7.14

Matt J
fuente
¿Qué codificación en chr usando?
njzk2
15
Tenga en cuenta que chr también actúa como unichr en Python 3. chr(31415) -> '窷'
William
66
@ njzk2: no se utiliza ningún tipo de codificación de caracteres que devuelve una cadena de bytes en Python 2. Es hasta que interpretarlo como un personaje, por ejemplo, chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. En Python 3 (o unichren Python 2), el número de entrada se interpreta como ordinal entero de punto de código Unicode: unichr(0x439) == '\u0439'(los primeros 256 enteros tienen el mismo mapeo que latin-1: unichr(0xe9) == b'\xe9'.decode('latin-1')el primer 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')es una cosa Unicode, no Pitón).
jfs
44
¿Por qué la función se llama "ord"?
eLymar
66
@eLymar: es la abreviatura de "ordinal", que tiene raíces lingüísticas similares a "orden", es decir, la representación numérica en lugar de simbólica del personaje
Jacob Krall
167

Tenga en cuenta que ord()no le da el valor ASCII per se; le da el valor numérico del carácter en cualquier codificación en la que se encuentre. Por lo tanto, el resultado ord('ä')puede ser 228 si está usando Latin-1, o puede aumentar a TypeErrorsi está usando UTF-8. Incluso puede devolver el punto de código Unicode si lo pasa como unicode:

>>> ord(u'あ')
12354
Ignacio Vazquez-Abrams
fuente
15
¿Cómo puede averiguar qué codificación está utilizando en una situación dada?
Moustache
1
@Moustache: en Python3, usará Unicode listo para usar.
tricasse 01 de
Depende del tipo de objeto . Python3 ( str ): unicodepor defecto. Python3 ( bytes ): str(b'\xc3\x9c', 'ascii')-> genera UnicodeDecodeError . Python3 ( bytes ): str(b'\xc3\x9c', 'utf-8')-> devuelve Ü . También puede consultar los seis paquetes.
nosahama
49

Estás buscando:

ord()
Jacob Krall
fuente
37

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

for ch in mystr:
    code = ord(ch)

o el un poco más rápido:

for code in map(ord, mystr):

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

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

y en Python 2.6 / 2.7, solo está un poco más involucrado porque no tiene un bytesobjeto de estilo Py3 ( byteses 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'):

Codificar como un tipo que itera nativamente por ordinal significa que la conversión es mucho más rápida; en pruebas locales tanto en Py2.7 como en Py3.5, la iteración de a strpara obtener sus códigos ASCII usando map(ord, mystr)comienza tomando aproximadamente el doble de tiempo por un len10 strque el uso bytearray(mystr)en Py2 o mystr.encode('ascii')Py3, y a medida que strse alarga, el multiplicador paga por map(ord, mystr)aumentos 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 strtendría un proporcionalmente grandes temporales bytes/ bytearray, pero a menos que las fuerzas de esta página en goleada, esto no es probable que importa .

ShadowRanger
fuente
3

Para obtener el código ASCII de un personaje, puede usar la ord()función.

Aquí hay un código de ejemplo:

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

Salida:

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