python urllib2 utf-8-Codierung
okay, ich habe: # -*- coding: utf-8 -*-
in meinem python-Datei.
snippet:
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.addheaders = [('Accept-Charset', 'utf-8')]
f =opener.open(url)
doc = f.read().decode('utf-8')
Die Antwort des Servers ist: (via f.info())
Content-Type: text/html; charset=UTF-8
aber ich bekomme die Fehlermeldung:
UnicodeDecodeError: 'utf8' codec can't decode byte[...]: invalid continuation byte
Was ist hier falsch?
InformationsquelleAutor | 2011-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen die Dekodierung der Daten mit 'latin-1' zu sehen, wie es aussieht. Was Sie sehen, weist auf eine UTF-8-decode error (siehe UnicodeDecodeError, invalid continuation byte ).
Wäre es hilfreich, wenn Sie veröffentlicht das Ergebnis der
list(f.read())[:100]
so können wir die Daten sehen.FYI, putting
# -*- coding: utf-8 -*-
ist nicht Ihr Problem. , Dass Codierung bezieht sich auf die Kodierung Ihrer python-Skript selbst, nicht die Daten, es ist der Umgang mit 🙂['<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E', ' ', 'h', 't', 'm', 'l', ' ', 'P', 'U', 'B', 'L', 'I', 'C', ' ', '"', '-', '/', '/', 'W', '3', 'C', '/', '/', 'D', 'T', 'D', ' ', 'X', 'H', 'T', 'M', 'L', ' ', '1', '.', '0', ' ', 'S', 't', 'r', 'i', 'c', 't', '/', '/', 'E', 'N', '"', ' ', '"', 'h', 't', 't', 'p', ':', '/', '/', 'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/', 'T', 'R', '/', 'x', 'h', 't', 'm', 'l', '1', '/', 'D', 'T', 'D', '/', 'x', 'h', 't', 'm', 'l', '1', '-', 's', 't', 'r']
InformationsquelleAutor Raymond Hettinger
Dass insbesondere Fehler wird Häufig verursacht durch den Versuch, zu Dekodieren, die mit utf-8, wenn der string war eigentlich mit latin1 kodiert. Sehen UnicodeDecodeError, invalid continuation byte für ein paar mehr Infos.
Ich vermute, dass trotz der header, den der server nicht Rückkehr utf8-kodierte Inhalte.
Einer Lösung, den es sich lohnt zu verfolgen, ist die Verwendung chardet zu 'erraten' welche Kodierung verwendet wird. Trotz chardet ist awesomeness, betrachten es als einen letzten Ausweg allerdings.
InformationsquelleAutor Rob Cowie