来自这里。
函数ord()会得到int值的 的char。而且,万一你想在 在玩过之后再转换回来 数字,函数chr()就可以做到。
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
在Python 2中,还有一个unichr'函数,返回[Unicode][2]字符,其序号为
unichr'参数。
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
在Python 3中,你可以用chr
代替unichr
。
请注意,ord()
不会给你ASCII值本身;它会给你该字符在任何编码中的数值。因此,如果你使用Latin-1,ord('ä')
的结果可能是228,如果你使用UTF-8,它可能引发一个`TypeError'。如果你传给它一个unicode,它甚至可以返回Unicode代码点来代替。
>>> ord(u'あ')
12354
公认的答案是正确的,但如果你需要一次将一大堆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的本地测试中,使用 "map(ord, mystr) "对一个 "str "进行迭代以获取其ASCII码,对于一个 "len "10的 "str "来说,开始时比在Py2上使用 "bytearray(mystr) "或在Py3上使用 "mystr.encode('ascii') "所花费的时间要长一倍,随着 "str "越来越长,"map(ord, mystr) "所支付的乘数上升到~6.5x-7x。
唯一的缺点是转换是一次完成的,所以你的第一个结果可能需要更长的时间,而且一个真正巨大的str
会有一个相称大的临时bytes
/bytearray
,但除非这迫使你进入页面激战,否则这不可能是问题。