Odpowiedzi:
Od tutaj :
funkcja ord () otrzyma wartość int znaku char. A jeśli chcesz ponownie przekonwertować po odtworzeniu numeru, funkcja chr () załatwi sprawę.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
W Pythonie 2 jest także unichrfunkcja zwracająca znak Unicode, którego unichrargumentem porządkowym jest :
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
W Pythonie 3 możesz użyć chrzamiast unichr.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. W Pythonie 3 (lub unichrw Pythonie 2) numer wejściowy jest interpretowany jako liczba całkowita w kodzie Unicode: unichr(0x439) == '\u0439'(pierwsze 256 liczb całkowitych ma takie samo odwzorowanie jak latin-1: unichr(0xe9) == b'\xe9'.decode('latin-1')pierwsze 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')jest to kwestia Unicode, a nie Pyton).
Zauważ, że ord()nie daje ci wartości ASCII per se; daje ci wartość liczbową znaku w dowolnym kodowaniu. Dlatego wynik ord('ä')może wynosić 228, jeśli używasz Latin-1, lub może podnieść a, TypeErrorjeśli używasz UTF-8. Może nawet zwrócić kod kodowy Unicode, jeśli podasz mu kod Unicode:
>>> ord(u'あ')
12354
Szukasz:
ord()
Przyjęta odpowiedź jest poprawna, ale istnieje bardziej sprytny / wydajny sposób, aby to zrobić, jeśli chcesz przekonwertować całą masę znaków ASCII na ich kody ASCII. Zamiast robić:
for ch in mystr:
code = ord(ch)
lub nieco szybciej:
for code in map(ord, mystr):
konwertujesz na rodzime typy Python, które bezpośrednio iterują kody. W Pythonie 3 jest to banalne:
for code in mystr.encode('ascii'):
a w Pythonie 2.6 / 2.7 jest tylko nieco bardziej zaangażowany, ponieważ nie ma bytesobiektu w stylu Py3 ( bytesjest to alias str, który iteruje się po znaku), ale mają 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'):
Kodowanie jako typ, który natywnie iteruje porządkowo, oznacza, że konwersja przebiega znacznie szybciej; w lokalnych testach zarówno na Py2.7, jak i Py3.5, iteracja a w strcelu uzyskania kodów ASCII przy użyciu map(ord, mystr)zaczyna się od około dwa razy dłużej dla len10 strniż przy użyciu bytearray(mystr)Py2 lub mystr.encode('ascii')Py3, a wraz z strwydłużaniem się mnożnik płaci za map(ord, mystr)podwyżki do ~ 6,5x-7x.
Jedynym minusem jest to, że konwersja odbywa się naraz, więc twój pierwszy wynik może potrwać nieco dłużej, a naprawdę ogromny strbędzie miał proporcjonalnie duży tymczasowy bytes/ bytearray, ale jeśli nie zmusi cię to do przerzucenia strony, nie ma to większego znaczenia .