Ich habe dieses Problem versuchen, alle Textknoten in einem HTML-Dokument mit lxml zu erhalten, aber ich bekomme ein 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 herauszufinden ( encoding = chardet.detect(response)['encoding']
), heißt es, es sei utf-8
. Es scheint seltsam, dass eine einzige Seite utf-8 und ascii hat. Eigentlich ist das:
fromstring(response).text_content().encode('ascii', 'replace')
löst das Problem.
Hier ist 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()
Sortie :
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 tun wollen, so dass ich nicht auf individueller Basis zu kodieren wollen.
UPDATE :
Vielleicht geht es hier um etwas anderes. Wenn ich dieses Skript auf dem Terminal ausführe, erhalte ich eine korrekte Ausgabe, aber wenn ich es in SublimeText ausführe, erhalte ich UnicodeEncodeError... ¿?
UPDATE2:
Das Problem tritt auch auf, wenn ich eine Datei mit dieser Ausgabe erstelle. .encode('ascii', 'replace')
funktioniert, aber ich hätte gerne eine allgemeinere Lösung.
Mit freundlichen Grüßen