2008-10-22 105 views

回答

950

here

功能ORD()會得到字符的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

+0

哪個編碼在chr中使用? – njzk2 2011-12-14 08:59:31

+0

@ njzk2:`latin1`(如果你的原始字節是用cp1251編碼的(例如cp1251)(西里爾語) – 2012-04-17 04:57:56

38

您正在尋找:

ord() 
134

請注意,ord()本身不給你ASCII值;它會爲您提供字符的數字值,因爲它使用的是任何編碼。因此,如果您使用Latin-1,則ord('ä')的結果可能爲228,或者如果您使用UTF- 8。它甚至可以返回的Unicode碼點,而不是如果你傳遞一個Unicode:

>>> ord(u'あ') 
12354 
12

接受的答案是正確的,但有一個更聰明的/有效的方法,如果你需要一大堆ASCII的轉換要做到這一點字符一次寫入他們的ASCII碼。而不是做:

for ch in mystr: 
    code = ord(ch) 

或稍快:

​​

你轉換成直接迭代代碼的Python原生類型。在Python 3中,這是微不足道的:

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

和Python的2.6/2.7,因爲它沒有一個PY3風格bytes對象時,它只是稍微有點複雜(bytesstr一個別名,它通過文字迭代) ,但他們確實有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)開始需要的時間約爲Py3上的bytearray(mystr)或Py3上的mystr.encode('ascii')上的,並且當str獲得時更長的時候,支付給map(ord, mystr)的乘數上漲至〜6.5x-7x。

唯一的缺點是,轉換是一下子,讓你的第一個結果可能需要較長的時間,而一個真正的巨大str將有一個比例較大的臨時bytes/bytearray,但除非這迫使你進入頁抖動,這可能不重要。