Heim  >  Artikel  >  Backend-Entwicklung  >  Verstümmelter chinesischer Python-Code

Verstümmelter chinesischer Python-Code

巴扎黑
巴扎黑Original
2016-12-07 10:41:191172Durchsuche

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')

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