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 的文檔。