Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Lösung des Problems der Kodierung und Dekodierung verstümmelter Zeichenfolgen
Warum wird der Fehler „UnicodeEncodeError: ‚ASCII‘-Codec kann Zeichen in Position 0-1 nicht kodieren: ordinal not in range(128 )“? In diesem Artikel wird dieses Problem untersucht. Die interne Darstellung von
string in Python ist die Unicode-Kodierung. Daher ist es bei der Kodierungskonvertierung normalerweise notwendig, Unicode als Zwischenkodierung zu verwenden Konvertieren Sie zuerst andere Codierungen. Die Zeichenfolge wird in Unicode decodiert und dann von Unicode in eine andere Codierung codiert.
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 der Kodierung besteht darin, die Unicode-Kodierung in andere kodierte Zeichenfolgen umzuwandeln, z. B. str2.encode('gb2312'), was bedeutet, dass die Unicode-kodierte Zeichenfolge str2 in die gb2312-Kodierung 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 Codedateien selbst sind konsistent codiert.
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, werden normalerweise Codedateien verwendet, die mit der Standardkodierung des Systems erstellt wurden.
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) #用来判断是否为unicode
Verwenden Sie Nicht-Unicode-Kodierung . Wenn str zum Kodieren verwendet wird, wird ein Fehler gemeldet
Wie erhalte ich die Standardkodierung 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') ist dasselbe wie str.decode('gb2312'), beide konvertieren gb2312-codierten str in Unicode-Codierung
Verwenden Sie str.
KlasseSie können die Codierungsform von str überprüfenDas Prinzip wurde schon lange erklärt, und endlich gibt es ein Allheilmittel:)
Der Code lautet wie folgt:
#!/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 vonDetaillierte Erläuterung der Lösung des Problems der Kodierung und Dekodierung verstümmelter Zeichenfolgen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!