Ответы:
От сюда :
Функция ord () получит значение типа char. И в случае, если вы хотите преобразовать обратно после игры с числом, функция 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
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. В Python 3 (или unichr
в Python 2) входной номер интерпретируется как целочисленный порядковый номер кодовой точки Unicode: unichr(0x439) == '\u0439'
(первые 256 целых чисел имеют то же отображение, что и latin-1:, unichr(0xe9) == b'\xe9'.decode('latin-1')
первые 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
это Unicode, а не Python).
Обратите внимание, что ord()
само по себе значение ASCII не дает; он дает вам числовое значение символа в любой кодировке, в которой он находится. Следовательно, результат ord('ä')
может быть 228, если вы используете Latin-1, или может повысить значение, TypeError
если вы используете UTF-8. Вместо этого он может даже вернуть код Unicode, если вы передадите ему Unicode:
>>> ord(u'あ')
12354
Ты ищешь:
ord()
Принятый ответ правильный, но есть более умный / эффективный способ сделать это, если вам нужно конвертировать целую кучу символов ASCII в их коды ASCII одновременно. Вместо того, чтобы делать:
for ch in mystr:
code = ord(ch)
или немного быстрее:
for code in map(ord, mystr):
вы конвертируете в нативные типы Python, которые итерируют коды напрямую. На Python 3 это тривиально:
for code in mystr.encode('ascii'):
и в Python 2.6 / 2.7, он только немного более сложный, потому что у него нет объекта стиля Py3 bytes
( bytes
это псевдоним для str
, который повторяется по символу), но они имеют 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)
начинается с примерно в два раза длиннее на len
10 , str
чем при использовании bytearray(mystr)
на py2 или mystr.encode('ascii')
на PY3, а также str
получает больше, множитель оплаченных map(ord, mystr)
подъемов до ~ 6,5x-7x.
Единственным недостатком является то, что преобразование происходит одновременно, поэтому ваш первый результат может занять немного больше времени, а действительно огромный str
будет иметь пропорционально большое временное число bytes
/ bytearray
, но если это не заставит вас перебирать страницы, это вряд ли будет иметь значение ,