2009-10-29 16 views
10

Sto programmando in Python e sto ottenendo informazioni da una pagina Web attraverso la libreria urllib2. Il problema è che la pagina in grado di fornire me con caratteri non ASCII, come 'ñ', 'á', ecc Nel momento urllib2 ottiene questo personaggio, provoca un'eccezione, in questo modo:Come gestire i caratteri Unicode (non ASCII) in Python?

File "c:\Python25\lib\httplib.py", line 711, in send 
    self.sock.sendall(str) 
File "<string>", line 1, in sendall: 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 74: ordinal not in range(128) 

ho bisogno di gestire quei personaggi. Voglio dire, non voglio gestire l'eccezione ma continuare il programma. C'è un modo per, per esempio (non so se è qualcosa di stupido), usare un altro codec piuttosto che l'ASCII? Perché devo lavorare con quei personaggi, inserirli in un database, ecc.

+0

Sarebbe utile se potessi dire, anche, se stai usando Python 3+, o qualcosa prima. –

+0

Non potrebbe essere Py3k poiché il modulo urllib2 è stato rimosso (inserito in urllib) ... –

+0

Duplicato: http://stackoverflow.com/questions/1020892/python-urllib2-read-to-unicode –

risposta

9

Basta leggere un set di byte dalla presa. Se si desidera una stringa bisogna decodificarlo:

yourstring = receivedbytes.decode("utf-8") 

(sostituendo qualunque codifica si sta utilizzando per utf-8)

Poi bisogna fare il contrario di inviare di nuovo fuori:

outbytes = yourstring.encode("utf-8") 
6

Se vuoi puoi usare unicode per tutto il tuo lavoro.

Probabilmente troverete questa domanda/risposta utile:

urllib2 read to Unicode

0

si potrebbe voler considerare di usare una libreria di analisi reale per trovare queste informazioni. lxml, ad esempio, già indirizza la codifica/decodifica Unicode utilizzando il set di caratteri dichiarato.

+0

Sfortunatamente molti siti Web producono documenti codificati in modo improprio, generalmente la codifica sarà per lo più corretta, ma ci saranno sporadiche sequenze di byte non valide. Alcune applicazioni non dovranno preoccuparsi di questo, ma se si stanno eseguendo la scansione di siti Web pubblici casuali, sarà un problema. – mikerobi

Problemi correlati