Voglio solo scaricare questo URL & # 8230; ma mi sta dando un errore! & # 8230; unicode .. (Python)

StackOverflow https://stackoverflow.com/questions/1808612

Domanda

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

Dai un'occhiata alla parte Unicode. Ho provato quelle due opzioni ... ma non funziona.

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

e anche questo quando provo il metodo più lungo di codifica ...

_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
È stato utile?

Soluzione

I tuoi dati html sono una stringa che proviene da Internet già codificata con una certa codifica. Prima di codificarlo in utf-8 , devi decodificarlo prima .

Python è implicity cercando di decodificarlo (ecco perché ottieni un UnicodeDecodeError non UnicodeEncodeError ).

Puoi risolvere il problema decodifica esplicita del tuo bytestring (usando la codifica appropriata) prima di provare a ricodificarlo in utf-8 .

Esempio:

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

Utilizza la codifica corretta la pagina è stata codificata in primo luogo, anziché 'some_encoding' .

Devi sapere quale codifica sta usando una stringa prima di poterla decodificare.

Altri suggerimenti

Non decodificare? htmlSource = htmlSource.decode ('utf8')

decodifica media " decodifica htmlSource dalla codifica utf8 "

codifica media " codifica htmlSource in codifica utf8 "

poiché si stanno estraendo i dati esistenti (ricerca per indicizzazione dal sito Web), è necessario decodificarli e quando si inserisce in mysql, potrebbe essere necessario codificare come utf8 in base alle regole di confronto mysql db / table / fields.

Probabilmente vuoi decodificare Utf8, non codificare :

htmlSource =  htmlSource.decode('utf8')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top