





Ты ищешь:
ord()
От здесь:
The function
ord()gets the int value of the char. And in case you want to convert back after playing with the number, functionchr()does the trick.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
В Python 2 также была функция unichr, возвращающая символ Юникод, порядковый номер которого является аргументом unichr:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
В Python 3 вы можете использовать chr вместо unichr.
ord () - документация Python 3.6.5rc1
ord () - документация Python 2.7.14
@ njzk2: latin1 (что не годится, если ваш исходный байт был закодирован (скажем) cp1251 (кириллица)
Обратите внимание, что chr также действует как unichr в Python 3. chr(31415) -> '窷'
@ njzk2: он не использует кодировку символов, он возвращает строку байтов в Python 2. Вы можете интерпретировать его как символ, например, 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'), это Юникод, а не Python).
Почему функция называется "ord"?
@eLymar: это сокращение от «порядковый», имеющее лингвистические корни, аналогичные «порядку», то есть числовое, а не символическое представление символа.
Обратите внимание, что ord() не дает вам значения ASCII как такового; он дает вам числовое значение символа в любой кодировке, в которой он находится. Поэтому результат ord('ä') может быть 228, если вы используете Latin-1, или он может вызвать TypeError, если вы используете UTF-8. Вместо этого он может даже вернуть кодовую точку Unicode, если вы передадите ей Unicode:
>>> ord(u'あ')
12354
Как узнать, какую кодировку вы используете в той или иной ситуации?
@Moustache: в Python3 вы будете использовать Unicode из коробки.
Зависит от тип объекта. Python3 (ул.): по умолчанию unicode. Python3 (байты): str(b'\xc3\x9c', 'ascii') -> повышает UnicodeDecodeError. Python3 (байты): str(b'\xc3\x9c', 'utf-8') -> возвращает Ü. Вы также можете посмотреть пакет шесть.
Принятый ответ правильный, но есть более умный / эффективный способ сделать это, если вам нужно сразу преобразовать целую кучу символов 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 он лишь немного сложнее, потому что у него нет объекта bytes в стиле Py3 (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, но если это не вынуждает вас перебрасывать страницы, это не вероятно имеет значение.
Чтобы получить код ASCII символа, вы можете использовать функцию ord().
Вот пример кода:
value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)
Выход:
Your value here: qwerty
[113, 119, 101, 114, 116, 121]
какую кодировку в chr использовать?