So erhalten Sie den ASCII-Wert eines Zeichens

1036

Wie erhalte ich den ASCII- Wert eines Zeichens als intin Python ?

Matt
quelle

Antworten:

1347

Von hier aus :

Die Funktion ord () würde den int-Wert des Zeichens erhalten. Und falls Sie nach dem Spielen mit der Zahl wieder konvertieren möchten, erledigt die Funktion chr () den Trick.

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

In Python 2 gibt es auch die unichrFunktion, die das Unicode- Zeichen zurückgibt, dessen Ordnungszahl das unichrArgument ist:

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

In Python 3 können Sie chranstelle von verwenden unichr.


ord () - Python 3.6.5rc1-Dokumentation

ord () - Python 2.7.14 Dokumentation

Matt J.
quelle
welche codierung in chr benutzt?
NJZK2
15
Beachten Sie, dass chr auch in Python 3 als Unichr fungiert.chr(31415) -> '窷'
William
6
@ njzk2: Es wird keine Zeichenkodierung verwendet. In Python 2 wird ein Bytestring zurückgegeben. Es liegt an Ihnen, ihn als Zeichen zu interpretieren, z chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. In Python 3 (oder unichrin Python 2) wird die Eingabenummer als Unicode-Codepunkt-Ganzzahl-Ordnungszahl interpretiert: unichr(0x439) == '\u0439'(Die ersten 256 Ganzzahlen haben dieselbe Zuordnung wie Latin-1 : unichr(0xe9) == b'\xe9'.decode('latin-1'), die ersten 128 - ASCII: unichr(0x0a) == b'\x0a'.decode('ascii')Es handelt sich nicht um eine Unicode-Sache Python).
JFS
4
Warum heißt die Funktion "ord"?
eLymar
6
@eLymar: Es ist die Abkürzung für "Ordinal", die ähnliche sprachliche Wurzeln wie "Ordnung" hat - dh die numerische und nicht die symbolische Darstellung des Zeichens
Jacob Krall
166

Beachten Sie, dass ord()Sie nicht den ASCII-Wert an sich erhalten. Es gibt Ihnen den numerischen Wert des Zeichens in der Codierung, in der es sich befindet. Daher kann das Ergebnis von ord('ä')228 sein, wenn Sie Latin-1 verwenden, oder es kann a auslösen, TypeErrorwenn Sie UTF-8 verwenden. Es kann sogar den Unicode-Codepunkt zurückgeben, wenn Sie ihm einen Unicode übergeben:

>>> ord(u'あ')
12354
Ignacio Vazquez-Abrams
quelle
15
Wie können Sie herausfinden, welche Codierung Sie in einer bestimmten Situation verwenden?
Schnurrbart
1
@Moustache: In Python3 verwenden Sie Unicode sofort.
Trikasse
Hängt vom Objekttyp ab . Python3 ( str ): unicodeStandardmäßig. Python3 ( Bytes ): str(b'\xc3\x9c', 'ascii')-> löst UnicodeDecodeError aus . Python3 ( Bytes ): str(b'\xc3\x9c', 'utf-8')-> gibt Ü zurück . Sie können auch in das Sechs- Paket schauen .
Nosahama
48

Du suchst nach:

ord()
Jacob Krall
quelle
36

Die akzeptierte Antwort ist korrekt, aber es gibt eine cleverere / effizientere Möglichkeit, dies zu tun, wenn Sie eine ganze Reihe von ASCII-Zeichen gleichzeitig in ihre ASCII-Codes konvertieren müssen. Anstatt zu tun:

for ch in mystr:
    code = ord(ch)

oder das etwas schneller:

for code in map(ord, mystr):

Sie konvertieren in native Python-Typen, die die Codes direkt iterieren. Unter Python 3 ist es trivial:

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

und in Python 2.6 / 2.7 ist es nur geringfügig komplizierter, da es kein bytesObjekt im Py3-Stil hat ( bytesist ein Alias ​​für str, der 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'):

Das Codieren als Typ, der nativ durch Ordnungszahlen iteriert, bedeutet, dass die Konvertierung viel schneller erfolgt. in lokalen Tests sowohl Py2.7 und Py3.5, ein Iterieren strseiner ASCII - Codes zu erhalten map(ord, mystr)für eine beginnt etwa doppelt so lange unter len10 strals die Verwendung von bytearray(mystr)auf Py2 oder mystr.encode('ascii')auf PY3, und wie die strlänger wird, der Multiplikator für bezahlte map(ord, mystr)steigen bis ~ 6,5x-7x.

Der einzige Nachteil ist , dass die Umstellung auf einmal, so dass Ihre erste Ergebnis ein wenig länger dauern könnte, und ein wirklich enorm streine verhältnismäßig große temporäre würde bytes/ bytearray, aber es sei denn , dies zwingt Sie in Seite Dreschen, dann ist dies wahrscheinlich nicht Sache .

ShadowRanger
quelle
3

Um den ASCII-Code eines Zeichens abzurufen, können Sie die ord()Funktion verwenden.

Hier ist ein Beispielcode:

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

Ausgabe:

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