Frage

theurl = 'http://bit.ly/6IcCtf/'
urlReq = urllib2.Request(theurl)
urlReq.add_header('User-Agent',random.choice(agents))
urlResponse = urllib2.urlopen(urlReq)
htmlSource = urlResponse.read()
if unicode == 1:
    #print urlResponse.headers['content-type']
    #encoding=urlResponse.headers['content-type'].split('charset=')[-1]
    #htmlSource = unicode(htmlSource, encoding)
    htmlSource =  htmlSource.encode('utf8')
return htmlSource

Bitte werfen Sie einen Blick auf dem Unicode-Teil. Ich habe diese beiden Optionen ausprobiert ... aber nicht funktioniert.

htmlSource =  htmlSource.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 370747: ordinal not in range(128)

und dies auch, wenn ich versuche, die länger Codierverfahren ...

_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
War es hilfreich?

Lösung

Ihre HTML-Daten sind eine Zeichenfolge, die aus dem Internet kommt codiert bereits mit einiger Codierung. Vor dem Codieren es utf-8 Sie muss es dekodieren erste Seite .

Python ist implicity versucht, es zu entschlüsseln (Das ist, warum Sie ein UnicodeDecodeError nicht bekommen UnicodeEncodeError).

Sie können das Problem lösen, indem sie explicity Decodierung Ihre bytestring (die entsprechende Codierung) vor versucht, es neu codieren utf-8.

Beispiel:

utf8encoded = htmlSource.decode('some_encoding').encode('utf-8')

Verwenden Sie die richtige Codierung der Seite in erster Linie codiert wurde, statt 'some_encoding'.

Sie Haben wissen, welche Kodierung eine Zeichenfolge verwendet, ist, bevor Sie es dekodieren kann.

Andere Tipps

Nicht dekodieren? htmlSource = htmlSource.decode('utf8')

dekodieren bedeuten "decode htmlSource von UTF-8-Codierung"

kodieren bedeuten "kodieren htmlSource auf UTF-8-Codierung"

, da Sie die vorhandenen Daten extrahieren (von der Website kriechen), müssen Sie sie entschlüsseln, und wenn Sie MySQL einsetzen, müssen Sie möglicherweise als UTF-8 nach Ihrem mysql db / Tabelle / Felder Sortierungen kodieren.

Wahrscheinlich Sie wollen dekodieren Utf8, nicht kodieren es:

htmlSource =  htmlSource.decode('utf8')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top