Python bekommen-Zeichen-code in andere Codierung?
Gegeben, ein Zeichen-code als integer-Zahl in eine Codierung, wie können Sie die Zeichen-code in utf-8 und einmal als integer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, ein Zeichen-code als integer-Zahl in eine Codierung, wie können Sie die Zeichen-code in utf-8 und einmal als integer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
UTF-8 ist eine variable-Länge-Kodierung, so nehme ich an, dass Sie wirklich meinte, "Unicode code point". Verwenden
chr()
konvertieren Sie die Zeichen-code zu einem Zeichen, Dekodieren und verwendenord()
um den code zu erhalten Punkt.chr() arg not in range(256)
für 'shift_jisx0213'chr
unterstützt nur ASCII, also nur die zahlen in der[0..255]
Bereich. Verwendenunichr
stattdessen für die Unicode-Unterstützung.UnicodeEncodeError: 'ascii' codec can't encode character u'\u8140' in position 0 : ordinal not in range(128)
chr(145)
ist wahrscheinlich entsprichtunichr(145).encode('latin1')
auf Python 2 wenn die Eingabe inrange(256)
. Es gibt keineunichr
auf Python 3 wird umbenannt inchr
. Es ist in der Regel ein hack zu beheben, die Eingabe, wenn Sie benötigen:reinterpreted = unistr.encode(one_encoding).decode(another_encoding)
Können Sie nur anzeigen, eine "ganze Zahl", von einer Codierung zur anderen, wenn Sie beide single-byte - Codierungen.
Hier ist ein Beispiel mit "iso-8859-15" und "cp1252" (alias "ANSI"):
Beachten Sie, dass
ord
wird hier verwendet, um die Ordnungszahl der codiert byte. Mitord
auf die ursprünglichen unicode-Zeichenfolge geben würde, seine unicode code point:Den reverse-Betrieb zu
ord
kann durchgeführt werden, indem entwederchr
(für codes, die in den Bereich0
zu127
) oderunichr
(für codes, die in den Bereich0
zusys.maxunicode
):Für multi-byte-Kodierungen, die eine einfache "integer-Zahl" - Zuordnung ist in der Regel nicht möglich.
Hier ist das gleiche Beispiel wie oben, aber mit "iso-8859-15" und "utf-8":
"Utf-8" - Codierung verwendet drei bytes zu Kodieren, den gleichen Charakter, so dass eine eins-zu-eins-Zuordnung ist nicht möglich. Having said that, viele Codierungen (einschließlich "utf-8") ausgelegt sind ASCII-kompatibel, so dass eine Zuordnung ist in der Regel möglich für codes im Bereich 0-127 (aber nur so trivial, weil der code immer gleich sein).
Hier ist ein Beispiel, wie das Kodieren/Dekodieren dance works:
Hoffe, das hilft 🙂
Wenn Sie brauchen, um zu konstruieren, die unicode direkt aus einer integer verwenden unichr: