Recipe 1.2. Converting Between Characters and Numeric Codes
Recipe 1.2. 字符与其对应的数字编码之间的转换
Credit: Luther Blissett
问题
您需要在字符与其对应的 ASCII(ISO)编码或 Unicode 编码之间相互转换。
解法
内建函数 ord 和 chr 就是专门用来做这件事情的:
>>> print ord('a')
97
>>> print chr(97)
a
内建函数 ord 还可以将长度被视为 1 的 Unicode 字符串作为实参,其返回结果为 Unicode 代码数值(最大到 65536)。若要从 Unicode 代码数值转换为长度视为 1 的 Unicode 字符串,可以使用内建函数 unichr :
>>> print ord(u'/u2020')
8224
>>> print repr(unichr(8224))
u'/u2020'
讨论
这大凡都是普通而无趣的任务,但有些时候,将字符(即 Python 中长度为 1 的字符串)与其对应的 ASCII 码或 Unicode 编码进行相互转换是有用处的。内建函数 ord、chr 和 unichr 满足了这方面的所有需求。特别需要注意的一点是 chr(n) 与 str(n) 之间的天壤之别,初学者有时候会混淆两者的用意:
>>> print repr(chr(97))
'a'
>>> print repr(str(97))
'97'
chr 接收一个较小的整数作为实参,根据 ASCII 标准返回该整数值对应的字符;str 接收任何整数作为参数,返回该整数的十进制的字符串形式。
若要将字符串转换为字符编码组成的列表(list),可以组合使用内建函数 map 和 ord 来完成:
>>> print map(ord, 'ciao')
[99, 105, 97, 111]
若要根据字符编码的列表来构建字符串,可以组合使用 ''.join、map 和 chr 来完成,例如:
>>> print ''.join(map(chr, range(97, 100)))
abc
请参见
Library Reference 和 Python in a Nutshell 一书中关于内建函数 chr、ord 和 unichr 的文档。