Cara mendapatkan nilai ASCII dari sebuah karakter

1038

Bagaimana cara mendapatkan nilai ASCII dari karakter sebagai intdalam Python ?

Mat
sumber

Jawaban:

1349

Dari sini :

fungsi ord () akan mendapatkan nilai int dari char. Dan jika Anda ingin mengonversi kembali setelah bermain dengan angka, fungsi chr () berfungsi.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

Dalam Python 2, ada juga unichrfungsinya, mengembalikan karakter Unicode yang ordinalnya adalah unichrargumen:

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

Di Python 3 Anda bisa menggunakan chrbukan unichr.


ord () - Dokumentasi Python 3.6.5rc1

ord () - dokumentasi Python 2.7.14

Matt J
sumber
pengkodean apa yang digunakan chr?
njzk2
15
Perhatikan bahwa chr juga bertindak sebagai unichr dalam Python 3. chr(31415) -> '窷'
William
6
@ njzk2: ia tidak menggunakan pengkodean karakter apa pun, ia mengembalikan bytestring dengan Python 2. Terserah Anda untuk menafsirkannya sebagai karakter misalnya chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й',. Dalam Python 3 (atau unichrPython 2), nomor input ditafsirkan sebagai Unicode codepoint integer ordinal: unichr(0x439) == '\u0439'(256 bilangan bulat pertama memiliki pemetaan yang sama dengan latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1'):, 128 pertama - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')itu adalah hal Unicode, bukan Python).
jfs
4
Mengapa fungsi ini disebut "ord"?
eLymar
6
@eLymar: kependekan dari "ordinal," yang memiliki akar bahasa yang mirip dengan "order" - yaitu representasi numerik dan bukan simbol dari karakter
Jacob Krall
167

Catatan yang ord()tidak memberi Anda nilai ASCII per se; itu memberi Anda nilai numerik karakter dalam apa pun penyandiannya. Oleh karena itu hasilnya ord('ä')bisa menjadi 228 jika Anda menggunakan Latin-1, atau itu dapat meningkatkan TypeErrorjika Anda menggunakan UTF-8. Ia bahkan dapat mengembalikan Unicode codepoint jika Anda memberikannya unicode:

>>> ord(u'あ')
12354
Ignacio Vazquez-Abrams
sumber
15
Bagaimana Anda bisa mengetahui pengkodean yang Anda gunakan dalam situasi tertentu?
Kumis
1
@Moustache: Di Python3, Anda akan menggunakan Unicode out-of-the-box.
tricasse
Tergantung pada jenis objek . Python3 ( str ): unicodesecara default. Python3 ( byte ): str(b'\xc3\x9c', 'ascii')-> memunculkan UnicodeDecodeError . Python3 ( byte ): str(b'\xc3\x9c', 'utf-8')-> mengembalikan Ü . Anda juga dapat melihat ke dalam paket enam .
nosahama
49

Anda mencari:

ord()
Jacob Krall
sumber
37

Jawaban yang diterima benar, tetapi ada cara yang lebih pintar / efisien untuk melakukan ini jika Anda perlu mengubah sejumlah besar karakter ASCII ke kode ASCII mereka sekaligus. Alih-alih melakukan:

for ch in mystr:
    code = ord(ch)

atau yang sedikit lebih cepat:

for code in map(ord, mystr):

Anda mengonversi ke tipe asli Python yang mengulang kode secara langsung. Di Python 3, ini sepele:

for code in mystr.encode('ascii'):

dan pada Python 2.6 / 2.7, itu hanya sedikit lebih terlibat karena tidak memiliki bytesobjek gaya Py3 ( bytesadalah alias untuk str, yang beralih berdasarkan karakter), tetapi mereka memiliki 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'):

Pengkodean sebagai jenis yang secara native diulang secara ordinal berarti konversi berjalan lebih cepat; dalam tes lokal pada Py2.7 dan Py3.5, iterasi a struntuk mendapatkan kode ASCII menggunakan map(ord, mystr)mulai mengambil sekitar dua kali lebih lama untuk len10 strdaripada menggunakan bytearray(mystr)pada Py2 atau mystr.encode('ascii')pada Py3, dan strsemakin lama, pengali dibayar untuk map(ord, mystr)kenaikan ke ~ 6.5x-7x.

Satu-satunya downside adalah bahwa konversi sekaligus, sehingga hasil pertama Anda mungkin memakan waktu sedikit lebih lama, dan yang benar-benar sangat besar strakan memiliki sementara besar secara proporsional bytes/ bytearray, tetapi kecuali ini memaksa Anda ke halaman meronta-ronta, ini tidak mungkin menjadi masalah .

ShadowRanger
sumber
3

Untuk mendapatkan kode ASCII karakter, Anda dapat menggunakan ord() fungsi ini.

Berikut ini contoh kode:

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

Keluaran:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
Upz
sumber