1036
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 unichr
funkcja zwracająca znak Unicode, którego unichr
argumentem porządkowym jest :
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
W Pythonie 3 możesz użyć chr
zamiast unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. W Pythonie 3 (lubunichr
w 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 wynikord('ä')
może wynosić 228, jeśli używasz Latin-1, lub może podnieść a,TypeError
jeśli używasz UTF-8. Może nawet zwrócić kod kodowy Unicode, jeśli podasz mu kod Unicode:źródło
unicode
domyślnie. Python3 ( bajty ):str(b'\xc3\x9c', 'ascii')
-> podnosi UnicodeDecodeError . Python3 ( bajty ):str(b'\xc3\x9c', 'utf-8')
-> zwraca Ü . Możesz także zajrzeć do pakietu sześciu .Szukasz:
źródło
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ć:
lub nieco szybciej:
konwertujesz na rodzime typy Python, które bezpośrednio iterują kody. W Pythonie 3 jest to banalne:
a w Pythonie 2.6 / 2.7 jest tylko nieco bardziej zaangażowany, ponieważ nie ma
bytes
obiektu w stylu Py3 (bytes
jest to aliasstr
, który iteruje się po znaku), ale mająbytearray
: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
str
celu uzyskania kodów ASCII przy użyciumap(ord, mystr)
zaczyna się od około dwa razy dłużej dlalen
10str
niż przy użyciubytearray(mystr)
Py2 lubmystr.encode('ascii')
Py3, a wraz zstr
wydłużaniem się mnożnik płaci zamap(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
str
będzie miał proporcjonalnie duży tymczasowybytes
/bytearray
, ale jeśli nie zmusi cię to do przerzucenia strony, nie ma to większego znaczenia .źródło
Aby uzyskać kod ASCII znaku, możesz użyć
ord()
funkcji.Oto przykładowy kod:
Wynik:
źródło