Konvertieren von UTF-8-Bytes in unicode-Codepunkte
Habe ich eine Reihe von UTF-8-Oktetten, und ich brauche Sie zurück konvertieren in unicode-Codepunkte. Wie kann ich dies in python.
z.B. UTF-8 octet ['0xc5','0x81'] umgewandelt werden soll, um 0x141 codepoint.
- Sind Sie zu 100% das ist, was du hast? Könnte ich bitte Fragen, eine sehr dumme Frage: Wie in aller Welt hast du es geschafft, erwerben die Daten in diesem format?
- Sind Sie versuchen, zu konvertieren von code Punkte oder "Python" Unicode-string? Das ist ein ganz großer Unterschied, denn der Python-Unicode-string hält UTF-16 und eine code-point verschlüsselt sein können mit zwei "Zeichen" -- ersatzpaar. Sich bewusst sein, was Sie wollen. Die akzeptierte Antwort würde nicht geben Sie den code Punkte aber UTF-16-codierte Zeichenfolge.
- Ich habe die Werte aus einer Konvertierungsfunktion, die konvertiert aus unserem internen Codierung auf utf-8 und Umgekehrt.
- Ich möchte zum konvertieren von utf-8 in unicode-Codepunkte. SO, wie man unicode-code-points anstelle von python-unicode-string
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python 3.x:
In Python 3.x,
str
ist die Klasse für Unicode-text, undbytes
ist für mit Bytes.Wenn Sie von "Oktette" Sie wirklich meinen strings in der form "0xc5' (statt '\xc5') können Sie konvertieren, um
bytes
wie diese:Können Sie konvertieren Sie dann
str
(ie: Unicode) mithilfe derstr
Konstruktor......oder durch Aufruf
.decode('utf-8')
auf diebytes
Objekt:Pre-3.x:
Vor 3.x, die
str
Typ war ein byte-array undunicode
war für Unicode-text.Wieder, wenn Sie von "Oktette" Sie wirklich meinen strings in der form "0xc5' (statt '\xc5') können Sie konvertieren Sie wie folgt:
Können Sie konvertieren Sie dann
unicode
mit dem Konstruktor......oder durch Aufruf
.decode('utf-8')
auf diestr
:int(x, 16)
verwendet werden könnten:bytearray(int(x, 16) for x in ['0xc5', '0x81']).decode('utf-8', 'surrogatepass')
(single-source-Python-2/3-code)unicode
im 3.x mehr-es ist jetztstr
. Ich habe aktualisiert die Antwort auf beide 2.x-und 3.x-Versionen.In schönen, 3.x, wo alle
str
s sind Unicode undbytes
sind, wasstr
s verwendet werden:Das ist, was Sie gefragt haben.
bytearray([0xc5, 0x81]).decode('utf-8')
das funktioniert sowohl Python 2 und 3.