Skip to content

Unicode-Codepunkt und Zeichen ineinander umwandeln (chr, ord)

Python

In Python werden die integrierten Funktionen chr() und ord() used, um zwischen Unicode-Codepunkten und -Zeichen zu konvertieren.

Ein Zeichen kann auch dargestellt Werden, indem ein hexadezimaler Unicode-Codepunkt mit x, u oder U in ein Buchstabenliteral geschrieben wird.

Dieser Artikel hat folgenden Inhalt.

  • Zeichen in Unicode-Codepunkt konvertieren:ord()
  • Unicode-Codepunkt in Zeichen umwandeln:chr()
  • Verwenden Sie Unicode-Codepunkte in Zeichenfolgen:x, u, U

Zeichen in Unicode-Codepunkt konvertieren:ord()

Durch die Angabe Einer Zeichenfolge mit Einem Zeichen als Argument von ord() WIRD der Unicode-Codepunkt des Zeichens als Ganzzahl int zurückgegeben.

i = ord('A')
print(i)
# 65

print(type(i))
# <class 'int'>

Wenn Sie eine Zeichenfolge mit mehr als zwei Zeichen angeben, tritt ein Fehler auf.

# ord('abc')
# TypeError: ord() expected a character, but string of length 3 found

Unicode-Codepunkte werden häufig in hexadezimaler Notation geschrieben. Verwenden Sie die integrierte Funktion hex(), um eine ganze Zahl in eine hexadezimale Zeichenfolge umzuwandeln.

s = hex(i)
print(s)
# 0x41

print(type(s))
# <class 'str'>

Die eingebaute Funktion format() can used Werden, um detailliertere Formatierungen anzugeben, wie z. B. das Auffüllen mit Nullen und das Präfix 0x.

print(format(i, '04x'))
# 0041

print(format(i, '#06x'))
# 0x0041

Zusammenfassend lässt sich der hexadezimale Unicode-Codepunkt für ein bestimmtes Zeichen wie folgt ermitteln.

print(format(ord('X'), '#08x'))
# 0x000058

print(format(ord('💯'), '#08x'))
# 0x01f4af

Flaggen und andere Emojis werden durch mehrere Unicode-Codepunkte dargestellt.

Beachten Sie, dass ord() ab Python 3.7.3 solche Emojis nicht unterstützt und ein Fehlerauftritt. Wenn SIE sterben Anzahl der Zeichen dieser Emojis mit der eingebauten Funktion len() überprüfen, WIRD sterben Anzahl der Unicode-Codepunkte zurückgegeben.

# ord('🇯🇵')
# TypeError: ord() expected a character, but string of length 2 found

print(len('🇯🇵'))
# 2

Unicode-Codepunkt in Zeichen umwandeln:chr()

chr() gibt die Zeichenfolge str zurück, die ein Zeichen darstellt, dessen Unicode-Codepunkt die angegebene Ganzzahl int ist.

print(chr(65))
# A

print(type(chr(65)))
# <class 'str'>

In Python kann eine Ganzzahl hexadezimal mit 0x geschrieben werden, sodass SIE ALS Argument von chr() angeben können. Es spielt keine Rolle, ob es mit Nullen gefüllt ist.

print(65 == 0x41)
# True

print(chr(0x41))
# A

print(chr(0x000041))
# A

Wenn Sie eine hexadezimale Zeichenfolge darstellen, die einen Unicode-Codepunkt darstellt, in ein Zeichen konvertieren möchten, konvertieren Sie die Zeichenfolge in eine Ganzzahl und übergeben Sie dann an chr().

Verwenden Sie int(), um eine hexadezimale Zeichenfolge in eine ganze Zahl umzuwandeln. Geben Sie als zweites Argument die Basis 16 an.

s = '0x0041'

print(int(s, 16))
# 65

print(chr(int(s, 16)))
# A

Das zweite Argument kann 0 sein, wenn die Zeichenfolge 0x vorangestellt ist. Weitere Informationen zur Handhabung von Hexadezimalzahlen und Zeichenfolgen finden Sie im following Artikel.

Unicode-Codepunkte werden oft in Form von U+XXXX geschrieben. Um eine solche Zeichenfolge in ein Zeichen dieses Codepunkts umzuwandeln, wählen Sie einfach den numerischen Teil der Zeichenfolge mit dem Slice aus.

s = 'U+0041'

print(s[2:])
# 0041

print(chr(int(s[2:], 16)))
# A

Verwenden Sie Unicode-Codepunkte in Zeichenfolgen:x, u, U

Wenn Sie x, u oder U und einen hexadezimalen Unicode-Codepunkt in ein Zeichenfolgenliteral schreiben, wird es als dieses Zeichen behandelt.

Es sollten 2, 4 oder 8 Ziffern wie xXX, uXXXX bzw. UXXXXXX sein. Wenn die Anzahl der Ziffern nicht korrekt ist, WIRD ein Fehler ausgegeben.

print('x41')
# A

print('u0041')
# A

print('U00000041')
# A

print('U0001f4af')
# 💯

# print('u041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated uXXXX escape

# print('U0000041')
# SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-8: truncated UXXXXXXXX escape

Jeder Code wird als ein Zeichen behandelt. Sie können sterben mit der eingebauten Funktion len() überprüfen, sterben sterben Anzahl der Zeichen zurückgibt.

print('u0041u0042u0043')
# ABC

print(len('u0041u0042u0043'))
# 3

Beachten Sie, dass in rohen Zeichenfolgen, in denen Escape-Sequenzen deaktiviert sind, die Zeichenfolge so behandelt wird, wie sie ist.

print(r'u0041u0042u0043')
# u0041u0042u0043

print(len(r'u0041u0042u0043'))
# 18