Як отримати значення ASCII символу


Відповіді:


1346

Від сюди :

Функція ord () отримала б значення int знака. І якщо ви хочете перетворити назад після гри з номером, функція 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, а не Пітон).
jfs

4
Чому функція називається "ord"?
eLymar

6
@eLymar: це скорочення до "порядкового", який має схоже мовне коріння на "порядок" - тобто числове, а не символічне зображення персонажа
Якоб

166

Зауважте, що ord()не дає вам значення ASCII; він дає вам числове значення символу в будь-якому кодуванні, в якому він знаходиться. Тому результат ord('ä')може бути 228, якщо ви використовуєте Latin-1, або він може підняти a, TypeErrorякщо ви використовуєте UTF-8. Він може навіть повернути кодову точку Unicode, замість того, якщо ви передасте їй unicode:

>>> ord(u'あ')
12354

15
Як можна дізнатися, яке кодування ви використовуєте в тій чи іншій ситуації?
Вуса

1
@Moustache: У Python3 ви будете використовувати Unicode нестандартно.
tricasse

Залежить від типу об'єкта . Python3 ( str ): unicodeза замовчуванням. Python3 ( байти ): str(b'\xc3\x9c', 'ascii')-> підвищує UnicodeDecodeError . Python3 ( байти ): str(b'\xc3\x9c', 'utf-8')-> повертає Ü . Ви також можете заглянути в шість пакетів.
носахама


36

Прийнята відповідь правильна, але є більш розумний / ефективний спосіб зробити це, якщо вам потрібно перетворити цілу купу символів 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, ітерація a strдля отримання ASCII-кодів з використанням map(ord, mystr)починає приймати приблизно вдвічі довше, ніж len10, strніж використання bytearray(mystr)на Py2 або mystr.encode('ascii')Py3, і в міру збільшення strчасу множник платить за map(ord, mystr)підвищення до ~ 6,5x-7x.

Єдиний мінус полягає в тому, що конверсія відбувається відразу, тому ваш перший результат може зайняти трохи більше часу, і справді величезний strматиме пропорційно великий тимчасовий bytes/ bytearray, але якщо це не змусить вас перемолоти сторінку, це, швидше за все, не має значення. .


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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.