Yanıtlar:
Gönderen burada :
fonksiyon ord () karakterin int değerini alır. Ve sayı ile oynadıktan sonra dönüştürmek istediğinizde, işlev chr () hile yapar.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Python 2'de, sıralaması argüman olan Unicode karakterini unichr
döndüren fonksiyon da vardır :unichr
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Python 3'te chr
bunun yerine kullanabilirsiniz unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. Python 3'te (veya unichr
Python 2'de) giriş numarası Unicode kod noktası tamsayı sıralaması olarak yorumlanır: unichr(0x439) == '\u0439'
(ilk 256 tamsayı latin-1 ile aynı eşleşmeye sahiptir: unichr(0xe9) == b'\xe9'.decode('latin-1')
ilk 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
bu bir Unicode şeyidir, değil Python).
ord()
ASCII değerini size vermediğini unutmayın ; hangi kodlamada olursa olsun karakterin sayısal değerini verir. Bu nedenle ord('ä')
Latin-1 kullanıyorsanız sonuç 228 olabilir veya TypeError
UTF-8 kullanıyorsanız a değerini yükseltebilir . Unicode iletirseniz bunun yerine Unicode kod noktasını da döndürebilir:
>>> ord(u'あ')
12354
Şunu arıyorsunuz:
ord()
Kabul edilen cevap doğrudur, ancak bir sürü ASCII karakterini aynı anda ASCII kodlarına dönüştürmeniz gerekiyorsa bunu yapmanın daha akıllı / verimli bir yolu vardır. Yapmak yerine:
for ch in mystr:
code = ord(ch)
veya biraz daha hızlı:
for code in map(ord, mystr):
kodları doğrudan yineleyen Python yerel türlerine dönüştürürsünüz. Python 3'te bu çok önemli:
for code in mystr.encode('ascii'):
ve Python 2.6 / 2.7'de, Py3 tarzı bir bytes
nesneye sahip olmadığı için ( karakter bytes
için str
yinelenen bir takma addır ), ancak aşağıdakilere sahipler 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'):
Yerel olarak sıralı olarak yinelenen bir tür olarak kodlama, dönüşümün çok daha hızlı olduğu anlamına gelir; hem Py2.7 hem de Py3.5 üzerindeki yerel testlerde str
, ASCII kodlarını kullanarak a'yı yinelemek, 10 için Py2 veya Py3'te kullanmaktan map(ord, mystr)
yaklaşık iki kat daha uzun sürmeye başlar ve daha uzun sürdüğü zaman, çarpanlar yükselir ~ 6.5x-7x'e kadar.len
str
bytearray(mystr)
mystr.encode('ascii')
str
map(ord, mystr)
Tek dezavantajı, dönüşümün bir kerede olması, bu nedenle ilk sonucunuzun biraz daha uzun sürebileceği ve gerçekten muazzam str
bir orantılı olarak büyük bir geçici olacağı bytes
/ bytearray
ancak bu sizi sayfanın daralmasına zorlamadığı sürece, bunun önemli olmadığı muhtemeldir. .