ascii-codec kann nicht decodieren byte 0xe3 in der Lage Fehler in Ubuntu/Python, aber nicht auf OS X/Python

Ich bin jetzt auf Ubuntu 13.04 und Python 2.7.4 und versucht, ein Skript auszuführen, einschließlich der folgenden Zeilen:

html = unicode(html, 'cp932').encode('utf-8')
html1, html2 = html.split(some_text) # this line spits out the error

Aber bei mir lief das Skript auf Ubuntu 13.04, aufgespießt auf einen Fehler UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 106: ordinal not in range(128). Aber genau das gleiche Skript immer ausgeführt werden können, erfolgreich auf OS X 10.8 und Python-2.7.3. So Frage ich mich, warum der Fehler aufgetreten ist, nur eine der beiden Plattformen...

Der erste Gedanke, der mir in den Sinn gekommen, besonders nach der Lektüre dieses post (UnicodeDecodeError: 'ascii' codec can T decode byte 0xef in position 1) war, dass die Dichotomie entstanden, weil ich bin in einer anderen LANG Umfeld, wo ich jp_JP.UTF-8 auf OS X aber en_US.UTF-8 auf Ubuntu. Also ich habe auch versucht, fügen Sie eine weitere Zeile os.environ['LANG'] = 'jp_JP.UTF-8' zu den oben genannten Tasche, aber immer noch den gleichen Fehler.

Einer mehr seltsames Phänomen ist, dass, wenn ich versuche, führen Sie das Skript aus IPython-shell auf Ubuntu und gehen in den debug-Modus sofort, nachdem der Fehler passiert ist, und führen Sie dann die Linie, die ursprünglich der Auslöser für die Fehler, die ich nicht bekomme den Fehler nicht mehr...

Also, was ist hier passiert? Und was bin ich?

Vielen Dank im Voraus.

Was ist in some_text? Meine Vermutung ist, dass es ein unicode Objekt, nicht ein str. Wenn ja, die Zeile wird wirksam call unicode(html).split(some_text), und dass die implizite Konvertierung ist, wo es scheitern wird. Können Sie melden die Art und die bytes auf jeder Plattform und sehen?
Auch die Frage, die Sie verlinkt hat nichts zu tun mit dem problem. Als die akzeptierte Antwort, sagt, dass Nutzer das problem nicht über die Codierung und Decodierung in seinem Quelltext, sondern über die implizite Codierung, die geschieht, wenn er prints an das terminal. Du bist nicht zu tun, die überall (oder zumindest nicht in dieser Zeile), so hat dies keine Auswirkungen auf Sie. (Und selbst wenn es das täte, beide Orte sind mit UTF-8 sowieso, also wäre das nicht das problem sein.)
PS, warum sind Sie mit unicode(html, 'cp932').encode('utf-8')? Es ist nicht illegal, mix and match die zwei verschiedenen Möglichkeiten der Umwandlung, aber es ist definitiv seltsam. Warum nicht html.decode('cp932').encode('utf-8')?

InformationsquelleAutor Blaszard | 2013-06-28

Schreibe einen Kommentar