如何获取字符的ASCII值


Answers:


1346

这里

函数ord()将获取char的int值。如果您想在玩完数字后再转换回去,可以使用chr()函数来解决。

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

在Python 2中,还有一个unichr函数,返回其序数为参数的Unicode字符unichr

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

在Python 3中,您可以使用chr代替unichr


ord()-Python 3.6.5rc1文档

ord()-Python 2.7.14文档


在chr中使用哪种编码?
njzk2 2011年

15
请注意,chr在Python 3中也充当unichr。– chr(31415) -> '窷'
William

6
@ njzk2:它不使用任何字符编码,它在Python 2中返回一个字节串。您可以将其解释为字符,例如chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'。在Python 3(或unichrPython 2)中,输入数字被解释为Unicode代码点整数ordinal :(unichr(0x439) == '\u0439'前256个整数与latin-1:具有相同的映射unichr(0xe9) == b'\xe9'.decode('latin-1'),前128个-ascii:unichr(0x0a) == b'\x0a'.decode('ascii')这是Unicode事物,不是蟒蛇)。
jfs

4
为什么将函数称为“ ord”?
eLymar '18

6
@eLymar:“ ordinal”的缩写,它的语言根源与“ order”相似,即字符的数字形式而不是符号形式
Jacob Krall

166

请注意,这ord()本身并不能提供ASCII值;它以任何编码形式为您提供字符的数值。因此,ord('ä')如果您使用的是Latin-1,则结果可以为228,如果您使用的TypeError是UTF-8 ,则其结果可以为a 。如果您传递一个unicode,它甚至可以返回Unicode代码点:

>>> ord(u'あ')
12354

15
如何确定给定情况下使用的编码?
Mustache

1
@Moustache:在Python3中,您将直接使用Unicode。
tricasse

取决于对象类型。Python3(str):unicode默认情况下。Python3(字节):str(b'\xc3\x9c', 'ascii')->引发UnicodeDecodeError。Python3(字节):str(b'\xc3\x9c', 'utf-8')->返回Ü。您也可以查看这六个包。
nosahama


36

公认的答案是正确的,但是如果您需要一次将一大堆ASCII字符转换为它们的ASCII代码,则可以采用一种更聪明/更有效的方法。而不是做:

for ch in mystr:
    code = ord(ch)

或稍快:

for code in map(ord, mystr):

您将转换为直接对代码进行迭代的Python本机类​​型。在Python 3上,这很简单:

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

在Python 2.6 / 2.7上,它涉及的只是一点点,因为它没有Py3样式的bytes对象(bytes是的别名str,它是按字符迭代的),但是它们确实有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'):

编码为按序本机迭代的类型意味着转换要快得多。在Py2.7和Py3.5的本地测试中,使用进行迭代str以获取其ASCII码map(ord, mystr)开始关闭需要大约两倍的时间为len10 str比使用bytearray(mystr)上的Py2或mystr.encode('ascii')在PY3,并作为str变长,乘数支付map(ord, mystr)上升至〜6.5x-7x。

唯一的缺点是转换是一次完成的,因此您的第一个结果可能会花费更长的时间,而真正巨大的str临时结果会成比例地增加bytes /bytearray,但是除非迫使您进入页面崩溃状态,否则这无关紧要。


3

要获取字符的ASCII码,您可以使用 ord()函数。

这是示例代码:

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

输出:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.