¡Solo quiero descargar esta URL & # 8230; pero me está dando un error! & # 8230; unicode .. (Python)

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

Pregunta

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

Por favor, eche un vistazo a la parte de Unicode. He intentado esas dos opciones ... pero no funciona.

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

y también esto cuando intento el método más largo de codificación ...

_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
¿Fue útil?

Solución

Sus datos html son una cadena que proviene de Internet ya codificada con algo de codificación. Antes de codificarlo en utf-8 , primero debe decodificarlo .

Python está implicity tratando de descodificarlo (por eso obtienes un UnicodeDecodeError no UnicodeEncodeError ).

Puede resolver el problema decodificando explícitamente la prueba de byem (utilizando la codificación adecuada) antes de intentar volver a codificarla en utf-8 .

Ejemplo:

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

Use la codificación correcta, la página se codificó en primer lugar, en lugar de 'some_encoding' .

Usted tiene para saber qué codificación está utilizando una cadena antes de poder descodificarla.

Otros consejos

¿No decodificar? htmlSource = htmlSource.decode ('utf8')

decode mean " decode htmlSource from utf8 encoding "

encode mean " encode htmlSource to utf8 encoding "

ya que está extrayendo los datos existentes (rastreando desde el sitio web), necesita decodificarlos, y cuando los inserta en mysql, es posible que deba codificar como utf8 de acuerdo con sus colaciones de db / table / fields de mysql.

Probablemente quieras descodificar Utf8, no codificar :

htmlSource =  htmlSource.decode('utf8')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top