Heim > Artikel > Backend-Entwicklung > Wie kann der Fehler behoben werden, wenn Python 2.7 chinesische Zeichenfolgen ausgibt?
Kodierungsproblem, wenn Python 2.7 chinesische Zeichenfolgen ausgibt
Warum erscheint der Fehler „UnicodeEncodeError: ‚ASCII‘-Codec kann Zeichen in Position 0-1 nicht kodieren: Ordinalzahl nicht im Bereich (128)“? In diesem Artikel wird dieses Problem untersucht.
Die interne Darstellung von Zeichenfolgen in Python ist die Unicode-Codierung. Daher ist es bei der Codierungskonvertierung normalerweise erforderlich, Unicode als Zwischencodierung zu verwenden, dh zuerst Zeichenfolgen in anderen Codierungen in Unicode zu decodieren . und kodieren Sie dann von Unicode in eine andere Kodierung.
Die Funktion der Dekodierung 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.
Die Funktion von Encode 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.
Daher müssen Sie beim Transkodieren zunächst verstehen, welche Codierung die Zeichenfolge str hat, sie dann in Unicode decodieren und dann in andere Codierungen codieren
Die Standardcodierung der Zeichenfolge im Code ist dasselbe wie Die Codierung der Codedatei selbst ist konsistent.
Zum Beispiel: s='Chinese'
Wenn es sich um eine utf8-Datei handelt, ist die Zeichenfolge utf8-codiert. Wenn es sich um eine gb2312-Datei handelt, ist die Codierung gb2312. In diesem Fall müssen Sie zum Durchführen der Kodierungskonvertierung zunächst die Dekodierungsmethode verwenden, um sie in die Unicode-Kodierung zu konvertieren, und dann die Kodierungsmethode verwenden, um sie in andere Kodierungen zu konvertieren. Wenn keine bestimmte Kodierungsmethode angegeben ist, wird normalerweise die Codedatei verwendet, die mit der Standardkodierung des Systems erstellt wurde.
Wenn die Zeichenfolge wie folgt definiert ist: s=u'Chinese'
Die Kodierung der Zeichenfolge wird als Unicode angegeben, was die interne Kodierung von Python ist und sich von der Codedatei selbst unterscheidet . Codierung hat damit nichts zu tun. Daher müssen Sie in diesem Fall für die Codierungskonvertierung nur die Codierungsmethode direkt verwenden, um sie in die angegebene Codierung zu konvertieren.
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) #Used Bestimmen ob es Unicode ist
Bei Verwendung von Nicht-Unicode-Codierung str zum Codieren wird ein Fehler gemeldet
Wie erhalte ich die Standardcodierung des Systems?
#!/usr/bin/env python #coding=utf-8 import sys print sys.getdefaultencoding()
Die Ausgabe dieses Programms unter englischem Windows. Die Ausgabekonsole selbst kann die Codierung der Zeichenfolge nicht anzeigen und es ist kein Problem mit dem Programm selbst.
Wenn Sie den folgenden Code in UliPad ausführen:
wird folgende Meldung angezeigt: UnicodeEncodeError: „ascii“-Codec kann Zeichen an Position 0-1 nicht kodieren: Ordnungszahl nicht im Bereich( 128). Dies liegt daran, dass das Konsoleninformationsausgabefenster von UliPad unter englischem Windows angezeigt wirds=u"中文" print s
Ä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') und str.decode('gb2312') sind gleich, beide konvertieren gb2312-codierten str in Unicode-Codierung
Verwenden Sie str.__class__ Überprüfen Sie die Codierungsform of str
Nachdem wir lange über das Prinzip gesprochen haben, lasst uns endlich ein Allheilmittel finden:)
#!/usr/bin/env python #coding=utf-8 s="中文" if isinstance(s, unicode): #s=u"中文" print s.encode('gb2312') else: #s="中文" print s.decode('utf-8').encode('gb2312')
Das obige ist der detaillierte Inhalt vonWie kann der Fehler behoben werden, wenn Python 2.7 chinesische Zeichenfolgen ausgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!