Führen Sie einen ähnlichen Code wie diesen aus:
#!/usr/bin/env python s="中文" print s
Ich stoße in letzter Zeit oft auf dieses Problem: >
Frage 1: Syntaxfehler: Nicht-ASCII-Zeichen „xe4“ in Datei E:codingpythonUntitled 6.py in Zeile 3, aber keine Codierung deklariert, siehe http://www.python.org/peps/pep-0263 🎜>Frage 2: UnicodeDecodeError: 'ascii'-Codec kann Byte 0xe5 in Position 108 nicht dekodieren: Ordnungszahl nicht im Bereich (128)
Frage 3: UnicodeEncodeError: 'gb2312'-Codec kann nicht kodieren Zeichen u'u2014' in Position 72366: Unzulässige Multibyte-Sequenz. Das sind alles Probleme im Zusammenhang mit der Zeichenkodierung. Ich kann es nicht zum Laufen bringen. Hier sind Einige davon werde ich mit Ihnen teilen, die ich vor ein paar Tagen gefunden habe
Die interne Darstellung von Zeichenfolgen in Python ist Unicode-Codierung. Daher ist bei der Codierungskonvertierung normalerweise Unicode als Zwischencodierung erforderlich, d. h. Dekodieren Sie zuerst Zeichenfolgen anderer Kodierungen in Unicode und kodieren Sie 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 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.
In einigen IDEs erscheint die Ausgabe von Zeichenfolgen immer verstümmelt oder sogar fehlerhaft. Dies liegt tatsächlich daran, dass die Ergebnisausgabekonsole der IDE selbst die Codierung der Zeichenfolge nicht anzeigen kann, und nicht an einem Problem mit dem Programm selbst.
Wenn Sie den folgenden Code in UliPad ausführen:
s=u"中文"
print s
wird Folgendes angezeigt: UnicodeEncodeError: 'ascii' codec Zeichen an Position 0-1 können nicht kodiert werden: 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.
Der folgende Code könnte allgemeiner sein, 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') #!/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')
#!/usr/bin/env python #coding=utf-8 #python version:2.7.4 #system:windows xp import httplib2 def getPageContent(url): ''''' 使用httplib2用编程的方式根据url获取网页内容 将bytes形式的内容转换成utf-8的字符串 ''' #使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问 headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)', 'cache-control':'no-cache'} if url: response,content = httplib2.Http().request(url,headers=headers) if response.status == 200 : return content
import sys reload(sys) sys.setdefaultencoding('utf-8') #修改默认编码方式,默认为ascci print sys.getdefaultencoding() content = getPageContent("http://www.oschina.net/") print content.decode('utf-8').encode('gb2312') #!/usr/bin/env python #coding=utf-8 #python version:2.7.4 #system:windows xp import httplib2 def getPageContent(url): ''' 使用httplib2用编程的方式根据url获取网页内容 将bytes形式的内容转换成utf-8的字符串 ''' #使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问 headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)', 'cache-control':'no-cache'} if url: response,content = httplib2.Http().request(url,headers=headers) if response.status == 200 : return content
import sys reload(sys) sys.setdefaultencoding('utf-8') #修改默认编码方式,默认为ascci print sys.getdefaultencoding() content = getPageContent("http://www.oschina.net/") print content.decode('utf-8').encode('gb2312')
Wenn ich print content.decode('utf-8').encode( ändere 'gb2312') zum Ausdrucken Wenn content.decode('utf-8').encode('gb2312', 'ignore') ist, ist es in Ordnung und Chinesisch kann angezeigt werden, aber ich bin mir nicht sicher, ob es alles ist dass es nur ein Teil ist. Einige können nicht mit gb2312 codiert werden
Wenn ich jedoch die Website auf www.soso.com ändere, muss ich nicht in gb2312 konvertieren, ich kann utf-8 zur Anzeige verwenden Chinesisch normalerweise
Um es zusammenzufassen:
Die direkte Ausgabe der Datei an SS löst dieselbe Ausnahme aus. Wenn Sie chinesische Unicode-Zeichenfolgen verarbeiten, müssen Sie zunächst die entsprechende Codierungsfunktion aufrufen, um sie in eine andere Codierungsausgabe umzuwandeln. Dies gilt für jede Umgebung. In Python ist das „str“-Objekt ein Byte-Array. Es spielt keine Rolle, ob der Inhalt darin eine zulässige Zeichenfolge ist oder welche Codierung (gbk, utf-8, unicode) die Zeichenfolge verwendet. Diese Inhalte müssen vom Benutzer selbst aufgezeichnet und beurteilt werden. Diese Einschränkungen gelten auch für „Unicode“-Objekte. Bedenken Sie, dass der Inhalt eines „Unicode“-Objekts nie unbedingt gültige Unicode-Strings sind, wie wir gleich sehen werden. Auf der Windows-Konsole werden GBK-codierte STR-Objekte und Unicode-codierte Unicode-Objekte unterstützt.