Wie erhalte ich die ASCII Wert eines Zeichens als int
in Python?
Welche Kodierung wird in chr verwendet?
Wie erhalte ich die ASCII Wert eines Zeichens als int
in Python?
Von aquí :
Die Funktion
ord()
erhält den int-Wert des Zeichens. Und für den Fall, dass Sie zurück konvertieren wollen, nachdem Sie mit der Zahl, Funktionchr()
erfüllt den Zweck.ord('a') 97 chr(97) 'a' chr(ord('a') + 3) 'd'
In Python 2 gab es auch die unichr
Funktion, die die Unicode Zeichen, dessen Ordnungszahl die unichr
Argument:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 können Sie chr
anstelle von unichr
.
@njzk2: latin1
(was nicht gerade brillant ist, wenn das ursprüngliche Byte in (sagen wir) cp1251
(Kyrillisch)
Beachten Sie, dass ord()
gibt Ihnen nicht den ASCII-Wert an sich, sondern den numerischen Wert des Zeichens in der jeweiligen Kodierung. Daher ist das Ergebnis von ord('ä')
kann 228 sein, wenn Sie Latin-1 verwenden, oder es kann ein TypeError
wenn Sie UTF-8 verwenden. Er kann sogar den Unicode-Codepunkt zurückgeben, wenn Sie ihm einen Unicode übergeben:
>>> ord(u'')
12354
Wie können Sie herausfinden, welche Kodierung Sie in einer bestimmten Situation verwenden?
Abhängig von der Objekttyp . Python3 ( str ): unicode
standardmäßig. Python3 ( Bytes ): str(b'\xc3\x9c', 'ascii')
-> erhebt UnicodeDecodeError . Python3 ( Bytes ): str(b'\xc3\x9c', 'utf-8')
-> kehrt zurück Ü . Sie können sich auch über die sechs Paket.
Die akzeptierte Antwort ist richtig, aber es gibt einen clevereren/effizienteren Weg, dies zu tun, wenn Sie eine ganze Reihe von ASCII-Zeichen auf einmal in ihre ASCII-Codes umwandeln müssen. Anstatt zu tun:
for ch in mystr:
code = ord(ch)
oder die etwas schnellere:
for code in map(ord, mystr):
konvertieren Sie in Python-eigene Typen, die die Codes direkt iterieren. In Python 3 ist das trivial:
for code in mystr.encode('ascii'):
und unter Python 2.6/2.7 ist es nur geringfügig komplizierter, weil es keinen Py3-Stil hat bytes
Objekt ( bytes
ist ein Alias für str
(die nach Zeichen iteriert), aber sie haben 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'):
Die Kodierung als Typ, der nativ nach Ordnungszahlen iteriert, bedeutet, dass die Konvertierung viel schneller geht; in lokalen Tests sowohl mit Py2.7 als auch mit Py3.5 wurde die Iteration einer str
um seine ASCII-Codes zu erhalten, indem man map(ord, mystr)
dauert anfangs etwa doppelt so lange für eine len
10 str
als mit bytearray(mystr)
auf Py2 oder mystr.encode('ascii')
auf Py3, und als die str
länger wird, wird der Multiplikator, der für map(ord, mystr)
auf ~6,5x-7x ansteigt.
Der einzige Nachteil ist, dass die Umwandlung auf einmal erfolgt, so dass das erste Ergebnis etwas länger dauern kann und eine wirklich enorme str
würde eine verhältnismäßig große vorübergehende bytes
/ bytearray
aber solange Sie das nicht zu einem Seitenwechsel zwingt, ist das wahrscheinlich nicht von Bedeutung.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.