2012-04-13 10 views
0

Ich lese SQLASCII-Strings aus einer Datenbank und stieß auf einige Bytes, die nicht richtig dekodiert wurden, basierend auf der Big5-Codierung, die ich deklariert habe. Unten ist das vereinfachte Problem. Es scheint, dass die große 5 Kodierungstabelle für Python nicht weiß, wie diese 2 Zeichen zu entschlüsseln sind. Soweit ich das beurteilen kann (ich bin kein Experte), sind dies gültige chinesische Zeichen, da ich Notepad ++ benutzen kann und die Kodierung so ändern kann, dass sie als chinesische Schriftzeichen angezeigt werden. Ich habe verglichen, wie sie in Notepad ++ mit dieser Website aussehen, und die Zeichen stimmen überein, also nehme ich an, dass sie gültige Bytes für die Kodierungstabelle big5 sind.Python 3 kann nicht dekodieren xBD xC6 xBB x73 mit big5

http://ash.jp/code/cn/big5tbl.htm

by = b'\xBD\xC6\xBB\x73' 
print(by,len(by)) 
print(by.decode('big5')) 

b '\ XBD \ XC6 \ xbbs' 4

Traceback (letzter Anruf zuletzt): File "qtest1.py", Zeile 15, in Druck (durch .decode ('big5')) Datei "C: \ Python32 \ lib \ encodings \ cp1252.py", Zeile 19, in encode Rückgabecodecs.charmap_encode (input, self.errors, encoding_table) [0] UnicodeEncodeError: 'charmap' Codec kann Zeichen in Position 0-1 nicht codieren: Zeichenkarten zu

Alle

+1

Ich hätte härter suchen sollen, ich habe seitdem diesen Link..http: //wiki.python.org/moin/PrintFails gefunden und in IDLE getestet. – Goog

Antwort

0

Blick geschätzt Hilfe sorgfältig stark ...: das ist ein UnicodeEncodeError - es ist zu kodieren andernfalls, dekodieren nicht. Schauen Sie sich auch das verwendete Modul an: ...\lib\encodings\cp1252.py. Also versucht etwas Text in cp1252 zu kodieren.

In der Tat, Decodierung als Big5 funktioniert gut - ich kann Ihren genauen Code ausführen und chinesische Zeichen [1] erhalten. Das Problem ist Ihr Terminal - Python versucht, die chinesischen Zeichen mit Ihrer Windows-Codepage (cp1252) zu codieren, die nicht weiß, was sie damit anfangen soll. Sie sollten in der Lage sein, sie in eine Datei zu schreiben, die mit einer geeigneten Kodierung (UTF-8 oder big5) geöffnet wurde, oder tun, was immer Sie brauchen, einfach nicht in das Terminal schreiben.

[1] Die meisten Linux-Terminals verwenden UTF-8, daher funktioniert jedes Zeichen.

+0

Ok, danke für die Antwort. Auf der Scite-Konsole muss die Codepage festgelegt sein ... Entschuldigung für das Problem mit dem Neuling .... – Goog