Ich begann mit Python-Skripten in Kontakt zu kommen und stieß gleich zu Beginn auf das Problem der verstümmelten chinesischen Zeichen.
Kombiniert mit den Informationen im Internet, hier ist die Zusammenfassung:
Die interne Darstellung von Zeichenfolgen in Python ist Unicode-Codierung. Daher ist dies bei der Codierungskonvertierung der Fall Normalerweise ist es notwendig, Unicode als Zwischenkodierung zu verwenden, dh zuerst Zeichenfolgen anderer Kodierungen in Unicode zu dekodieren und dann von Unicode in eine andere Kodierung zu kodieren (kodieren).
Dekodierung, die Funktion besteht darin, andere kodierte Zeichenfolgen in Unicode-Kodierung umzuwandeln, z. B. str1.decode('gb2312'), was bedeutet, dass die gb2312-kodierte Zeichenfolge str1 in Unicode-Kodierung konvertiert wird.
Codierung codieren, die Funktion besteht darin, die Unicode-Codierung in andere codierte Zeichenfolgen umzuwandeln, z. B. str2.encode('gb2312'), was bedeutet, dass die Unicode-codierte Zeichenfolge str2 in die gb2312-Codierung konvertiert wird.
Wenn eine Zeichenfolge bereits Unicode ist, tritt beim Dekodieren ein Fehler auf. Daher muss normalerweise beurteilt werden, ob die Kodierungsmethode Unicode ist:
isinstance(s , Unicode) #Wird verwendet, um festzustellen, ob es sich um Unicode handelt
Die Verwendung von Nicht-Unicode-Codierung str zum Codieren führt zu einem Fehler
Wie erhalte ich die Standardcodierung des Systems?
#!/usr/bin/python
#coding=utf-8
import sys
print sys.getdefaultencoding()
Die Ausgabe dieses Programms unter englischem Windows Das Problem liegt in der Kodierung der Zeichenfolge, nicht im Programm selbst.
Wenn Sie den folgenden Code in UliPad ausführen:
s=u"Chinese" #Unicode-Kodierung angeben
print s
wird Folgendes anzeigen: UnicodeEncodeError: Der „ASCII“-Codec kann keine Zeichen an Position 0-1 kodieren: Ordnungszahl nicht im Bereich (128). Dies liegt daran, dass das Konsoleninformationsausgabefenster von UliPad unter englischem Windows angezeigt wird
Ändern Sie den letzten Satz in: print s.encode('gb2312')
Das Wort „Chinesisch“ kann korrekt ausgegeben werden.
Wenn der letzte Satz geändert wird in: print s.encode('utf8')
, dann ist die Ausgabe: xe4xb8xadxe6x96x87. Dies ist das Ergebnis der Ausgabe des Konsoleninformationsfensters, das utf8 ausgibt -kodierte Zeichenfolge gemäß ASCII-Kodierung.
unicode(str,'gb2312') ist dasselbe wie str.decode('gb2312'). Sie konvertieren beide gb2312-codierte str in Unicode-Codierung.
Sie können str.__class__ verwenden die Codierungsform von str
Nachdem wir lange über das Prinzip gesprochen haben, ist hier der Code:
#coding=utf-8
#!/usr/bin/ python
s="中文"
if isinstance(s, unicode):
print s.encode( 'gb2312')
else:
print s.decode('utf-8').encode('gb2312')