Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann der Fehler behoben werden, wenn Python 2.7 chinesische Zeichenfolgen ausgibt?

Wie kann der Fehler behoben werden, wenn Python 2.7 chinesische Zeichenfolgen ausgibt?

零下一度
零下一度Original
2017-06-28 15:57:322893Durchsuche

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 wird
s=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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn