Как получить значение ASCII символа

Ответы:

1349

От сюда :

Функция 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.


ord () - документация Python 3.6.5rc1

ord () - документация Python 2.7.14

Мэтт Дж
источник
какую кодировку в chr использовать?
njzk2
15
Обратите внимание, что chr также действует как unichr в Python 3. chr(31415) -> '窷'
Уильям
6
@ 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')это Unicode, а не Python).
JFS
4
Почему функция называется "ord"?
eLymar
6
@eLymar: это сокращение от «ординал», который имеет лингвистические корни, похожие на «порядок» - то есть числовое, а не символическое представление символа
Джейкоб Кралл
167

Обратите внимание, что ord()само по себе значение ASCII не дает; он дает вам числовое значение символа в любой кодировке, в которой он находится. Следовательно, результат ord('ä')может быть 228, если вы используете Latin-1, или может повысить значение, TypeErrorесли вы используете UTF-8. Вместо этого он может даже вернуть код Unicode, если вы передадите ему Unicode:

>>> ord(u'あ')
12354
Игнасио Васкес-Абрамс
источник
15
Как узнать, какую кодировку вы используете в данной ситуации?
Усы
1
@ Moustache: в Python3 вы будете использовать Unicode "из коробки".
Трикасс
Зависит от типа объекта . Python3 ( str ): unicodeпо умолчанию. Python3 ( bytes ): str(b'\xc3\x9c', 'ascii')-> повышает UnicodeDecodeError . Python3 ( байты ): str(b'\xc3\x9c', 'utf-8')-> возвращает Ü . Вы также можете посмотреть на шесть пакетов.
Ношахама
37

Принятый ответ правильный, но есть более умный / эффективный способ сделать это, если вам нужно конвертировать целую кучу символов 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)начинается с примерно в два раза длиннее на len10 , strчем при использовании bytearray(mystr)на py2 или mystr.encode('ascii')на PY3, а также strполучает больше, множитель оплаченных map(ord, mystr)подъемов до ~ 6,5x-7x.

Единственным недостатком является то, что преобразование происходит одновременно, поэтому ваш первый результат может занять немного больше времени, а действительно огромный strбудет иметь пропорционально большое временное число bytes/ bytearray, но если это не заставит вас перебирать страницы, это вряд ли будет иметь значение ,

ShadowRanger
источник
3

Чтобы получить 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]
УПЗ
источник