[Python-es] pycurl y contenidos en UTF-8

Raúl Alexis Betancor Santana rbetancor en gmail.com
Sab Ene 15 01:22:35 CET 2011


Buenas a todos.

Gracias a los links que me posteraron como respuesta a mi consulta sobre
documentación de pycurl ... he podido hacer lo que quería, conectarme al
web-chat ajax del site y poder descargar los mensajes.

Ahora se plantea un problema que me tiene hablando solo toda la tarde y al
que no le encuentro solución.

Cuando hago la llamada a curl para que descarge los mensajes, el site me
devuelve un xml con los mensajes he información extra.

import os.path
import time
import pycurl
import urllib
import StringIO
import codecs

[...]

output = StringIO.StringIO()
header = StringIO.StringIO()

[...]

c.setopt(pycurl.WRITEFUNCTION, output.write)
c.setopt(pycurl.HEADERFUNCTION, header.write)

[...]

# llamas a la url
c.perform()

[...]

xml = output.getvalue()

Bien .. a partir de aquí empiezan los problemas ... si intento grabar el
contenido a un fichero .xml para luego procesarlo con otra script python, lo
hago así:

f = open('salida.xml','wb')
value = output.getvalue().decode('utf-8')
if value.strip():
        f.write(value.encode('utf-8'))
f.close()

...

El problema es que el fichero salida.xml, cuando lo voy a procesar con el
otro script python, que usa lxml ... se queja de los caracteres
"especiales", que está codificados en UTF-8 (o deberían) ... no son válidos.

He probado de esta otra manera:

f = codecs.open('salida','wb','utf-8')
#Y por ultimo la respuesta guardada en la variable output
value = output.getvalue()
if value.strip():
        f.write(value)
f.close()
c.close()

Y no hay forma ... luego al intentar procesarlo con lxml se queja de errores
relacionados con la codificación.

La pregunta es como lidiar con esta situación ¿? ... como respuesta a la
petición de pycurl, objeto un XML que está codificado en UTF-8 ..., necesito
grabarlo correctamente para poder procesarlo luego, ¿que estoy haciendo mal?

Saludos
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110115/0a648618/attachment.html>


Más información sobre la lista de distribución Python-es