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)
. Jedoch, wenn ich versuche, den Typ der Codierung 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 ist dies:UnicodeEncodeError beim Abrufen der URL
fromstring(response).text_content().encode('ascii', 'replace')
löst das Problem.
Hier ist es mein Code:
from lxml.html import fromstring
import urllib2
import chardet
request = urllib2.Request(my_url)
request.add_header('User-Agent',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')
request.add_header("Accept-Language", "en-us")
response = urllib2.urlopen(request).read()
print encoding
print fromstring(response).text_content()
Ausgang:
utf-8
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
Was kann ich tun, um dieses Problem zu lösen ?. Denken Sie daran, dass ich dies mit ein paar anderen Seiten machen möchte, also möchte ich nicht auf einer individuellen Basis verschlüsseln.
UPDATE:
Vielleicht ist es etwas anderes, hier geht. Wenn ich dieses Skript auf dem Terminal ausführen, bekomme ich eine korrekte Ausgabe, aber wenn ich es in SublimeText ausführen, bekomme ich UnicodeEncodeError ... ¿?
UPDATE2:
Es passiert auch, wenn ich eine Datei mit dieser Ausgabe erstellen. .encode('ascii', 'replace')
funktioniert, aber ich hätte gerne eine allgemeinere Lösung.
Grüße
Erzeugt 'print u '\ u00A9" 'in Ihrem Skript auch den Fehler? – jfs
Ja.UnicodeEncodeError: 'ascii' Codec kann nicht codieren Charakter u \ 'xA9' in Position 0: Ordnungszahl nicht in Reichweite (128) :-) –
Sie PYTHONIOENCODING, was auch immer Zeichencodierung Sublime Text akzeptiert einstellen könnte. – jfs