关于python:如何获取字符的ascii值?

How to get the ASCII value of a character?

在python中,如何获得作为int的字符的ascii值?


从这里:

function ord() would get the int value
of the char. And in case you want to
convert back after playing with the
number, function chr() does the trick.

1
2
3
4
5
6
7
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

在python 2中,还有unichr函数,返回顺序为unichr参数的unicode字符:

1
2
3
4
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

在python 3中,可以使用chr而不是unichr

ORD()-python 3.6.5rc1文档

ORD()-python 2.7.14文档


请注意,ord()本身并没有提供ASCII值;它提供了字符的数字值,不管它是用什么编码的。因此,如果使用拉丁语-1,ord('?')的结果可能是228;如果使用utf-8,则可以提高TypeError。如果您将unicode传递给它,它甚至可以返回unicode码位:

1
2
>>> ord(u'あ')
12354


您正在寻找:

1
ord()

接受的答案是正确的,但是如果您需要一次将一整串ASCII字符转换为它们的ASCII代码,则有一种更聪明/更有效的方法可以做到这一点。而不是:

1
2
for ch in mystr:
    code = ord(ch)

或者稍微快一点:

1
for code in map(ord, mystr):

您可以转换为直接迭代代码的python本机类型。在python 3上,这是微不足道的:

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

而在python 2.6/2.7上,它只涉及了一点,因为它没有py3样式的bytes对象(bytesstr的别名,它按字符迭代),但它们确实有bytearray

1
2
3
4
5
# 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上的本地测试中,使用map(ord, mystr)迭代str以获得其ASCII代码开始时,使用len10 str的时间比使用bytearray(mystr)在PY2或mystr.encode('ascii')在PY3上的时间长约两倍,并且作为str越长,为map(ord, mystr)支付的乘数上升到约6.5x-7x。

唯一的缺点是转换是同时进行的,所以您的第一个结果可能需要更长的时间,而真正巨大的str将有一个相应的大临时bytes/bytearray,但除非这迫使您翻页,否则这不太可能重要。