2008-10-22 75 views

cevap

950

here Gönderen:

fonksiyon ord() char int değerini tanınacak. Ve eğer için numarası ile oynadıktan sonra geri dönmek isterseniz, chr() işlevi hile yapar.

>>> unichr(97) 
u'a' 
>>> unichr(1234) 
u'\u04d2' 

Python 3 size chr yerine unichr kullanabilirsiniz:

>>> ord('a') 
97 
>>> chr(97) 
'a' 
>>> chr(ord('a') + 3) 
'd' 
>>> 

Python 2'de, kimin sıralı unichr argümanı Unicode karakteri dönen, ayrıca unichr işlevi yoktur.

+0

hangi kodlama chr kullanarak? – njzk2

+0

@ njzk2: 'latin1' (eğer orijinal baytınız (say)' cp1251'de (Kiril) –

+13

kodlanmışsa yapılacak harika bir şey değildir. Not chr aynı zamanda Python 3'te unichr olarak da işlev görür. 'chr (31415) -> '窷' ' – William

38
Sen aradığınız

:

ord() 
134

ord() 'nin size ASCII değerini vermediğini unutmayın; kodlamada, karakterin sayısal değerini verir. Bu nedenle, Latin-1 kullanıyorsanız ord ('ä') sonucu 228 olabilir veya UTF kullanıyorsanız, bir TypeError'ı yükseltebilir. 8.

>>> ord(u'あ') 
12354 
+6

Belirli bir durumda hangi kodlamayı kullandığınızı nasıl öğrenebilirsiniz? – Moustache

12

kabul cevabın doğru olmakla birlikte, ASCII bir sürü dönüştürmek gerekiyorsa bunu yapmak için daha akıllı/verimli bir yolu yoktur: Hatta bunu bir unicode geçmesi yerine eğer Unicode kodlaması dönebilirsiniz ASCII kodlarını bir kerede Yerine yapmanın:

for ch in mystr: 
    code = ord(ch) 

veya biraz daha hızlı:

for code in map(ord, mystr): 

doğrudan kodları yineleme Python yerli türlerine dönüştürmek. (bytesstr için bir takma, karakteri ile dolaşır olduğu)

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

ve bir PY3 tarzı bytes nesne olmadığı için Python 2.6/2.7 üzerinde, sadece biraz daha işin içinde: Python 3 günü, Önemsiz ama bytearray var: sıralı tarafından doğal olarak dolaşır dönüşüm anlamına gelen bir türü olarak

# 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'): 

Kodlama çok daha hızlı gider; map(ord, mystr) PY3 üzerinde Py2 üzerinde bytearray(mystr) veya mystr.encode('ascii') kullanmaktan daha için yaklaşık iki kat daha uzun süren kapalı başlar ve str alır gibi onun ASCII kodları kullanarak almak için bir str yineleme Py2.7 ve Py3.5 hem yerel testlerde, içinde Daha uzun, map(ord, mystr) için ödenen çarpan, ~ 6.5x-7x'e yükselir.

tek dezavantajı bu nedenle ilk sonuç biraz daha uzun sürebilir, dönüşüm tek seferde olmasıdır ve gerçekten muazzam strbytes/bytearray geçici bir oransal büyük olurdu, ancak bu sayfa dayak içine zorlar sürece, Bu önemli değildir.

İlgili konular