UnicodeEncodeError beim Abrufen der URL

9

Ich habe dieses Problem versucht, alle Textknoten in einem HTML-Dokument mit lxml zu bekommen, aber ich bekomme einen UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128) . Wenn ich jedoch versuche, die Art der Kodierung dieser Seite ( encoding = chardet.detect(response)['encoding'] ) herauszufinden, heißt es utf-8 . Es scheint seltsam, dass eine einzelne Seite utf-8 und ascii hat. Eigentlich das:

%Vor%

löst das Problem.

Hier ist mein Code:

%Vor%

Ausgabe:

%Vor%

Was kann ich tun, um dieses Problem zu lösen ?. Denken Sie daran, dass ich dies mit ein paar anderen Seiten tun möchte, also möchte ich nicht auf einer individuellen Basis verschlüsseln.

UPDATE:

Vielleicht ist hier noch etwas anderes los. Wenn ich dieses Skript auf dem Terminal ausführe, erhalte ich eine korrekte Ausgabe, aber wenn ich es in SublimeText ausführe, bekomme ich UnicodeEncodeError ... ¿?

UPDATE2:

Es passiert auch, wenn ich eine Datei mit dieser Ausgabe erstelle. .encode('ascii', 'replace') funktioniert, aber ich hätte gerne eine allgemeinere Lösung.

Grüße

    
Robert Smith 16.06.2012, 00:22
quelle

3 Antworten

5

Können Sie versuchen, Ihre Zeichenfolge mit repr () zu umhüllen? Dieser Artikel hilft möglicherweise.

%Vor%     
ChipJust 22.06.2012, 02:49
quelle
3

Was das Schreiben in eine Datei betrifft, wie in der Bearbeitung angegeben, würde ich empfehlen, die Datei mit dem Codecs-Modul zu öffnen:

%Vor%

Ich kenne SublimeText nicht, aber es scheint zu versuchen, Ihre Ausgabe als ASCII zu lesen, daher der Kodierungsfehler.

    
Justin.Wood 22.06.2012 03:23
quelle
0

Auf der Grundlage Ihrer ersten Aktualisierung würde ich sagen, dass das Terminal Python sagte, utf-8 und SublimeText auszugeben, dass es ascii erwartet. Ich denke, die Lösung besteht darin, die richtigen Einstellungen in SublimeText zu finden.

Wenn Sie jedoch nicht ändern können, was SublimeText erwartet, ist es besser, die Funktion encode zu verwenden, wie Sie es bereits in einer separaten Funktion getan haben.

%Vor%

Sie können diese Funktion anstelle von print verwenden. Beachten Sie, dass sich die Ausgabe Ihres Programms bei Ausführung in SublimeText von Terminal unterscheidet. Aufgrund der replace akzentuierten Zeichen verlieren ihre Akzente, wenn dieser Code in SublimeText ausgeführt wird, z. é wird als e angezeigt.

    
Marco de Wit 21.06.2012 20:51
quelle