[Python-es] Código funciona en Py3 pero no en Py2.6

Luis Miguel Morillas morillas en gmail.com
Jue Ago 26 17:28:25 CEST 2010


El 26 de agosto de 2010 02:44, Mauricio Baeza
<mauricio en correolibre.net> escribió:
>
> El mié, 25-08-2010 a las 22:38 +0200, Luis Miguel Morillas escribió:
>
> El 25 de agosto de 2010 20:30, Mauricio Baeza
> <mauricio en correolibre.net> escribió:
> >
> > El mié, 25-08-2010 a las 13:33 +0200, Chema Cortes escribió:
> >
> > El 25 de agosto de 2010 10:02, Mauricio Baeza
> > <mauricio en correolibre.net> escribió:
> >
> > > Gracias por tu respuesta, efectivamente, abriéndolo con:
> > >
> > > archivo=codecs.open("Factura.xml","w",encoding="utf8")
> > >
> > > puedo grabar sin problemas el archivo editado, pero me queda la duda por que al generarlo puedo guardarlo sin problemas con caracteres acentuados con las siguientes líneas:
> > >
> > > archivo = open('Factura.xml', 'w')
> > > archivo.write(domDoc.toxml())
> > > archivo.close()
> > >
> > > pero no al editarlo.
> >
> > Después de analizar un poco el problema que comentas, veo que en la
> > edición estás añadiendo un atributo con una cadena "no-unicode" leída
> > de un fichero de texto. Al pasar el dom a xml (por defecto en utf8) es
> > donde salta el problema al no saber pasar a unicode, antes incluso de
> > grabar en el fichero.
> >
> > Con python3, todo texto es unicode y no aparece este problema; pero
> > con python2 debes pasar la cadena a unicode antes de añadirla al dom:
> >
> > sello = open('sellob64.txt', 'r').read()
> > sello = unicode(sello, "utf8")  #cambia a la codificación que tenga el fichero
> >
> > También podrías leer el fichero de texto en utf8 con el módulo codecs
> > tal y como te había comentado antes.
> >
> > Espero que algún experto en xml pueda confirmar lo dicho.
> > _______________________________________________
> >
> > Hola Chema...
> >
> > Agradezco el tiempo que le has dedicado...
> >
> > He probado a abrir el XML y guardar inmediatamente (sin editar) y me da el mismo error, también abrí el archivo de texto como me has enseñado y da el mismo error, por lo que todo apunta a que el problema esta en el modo en que minidom parsea el XML en la línea:
> >
> > domDoc = minidom.parse('factura.xml')
> >
> > Por lo pronto el tema esta resuelto con la línea que me has enseñado:
> >
> > archivo = codecs.open("factura.xml","w",encoding="utf8")
> >
> > Pero si, ojala algún experto en XML pueda iluminarnos...
> >
>
> Puedes mandar una copia de los dos archivos (sellob64.txt y factura.xml) ?
>
> --  lm
>
>
> Gracias Luis, te lo he enviado a tu correo personal...
>
>

No tengo mucha experiencia con minidom, pero tiene pinta de un bug. Es
un error del writer al serializar el nodo. En principio esta línea
debería de funcionar:
    domDoc.writexml(archivo, encoding="utf-8")
Pero sigue generando el error.

Puedes sustituirla por ésta:
    archivo.write(domDoc.toxml(encoding="utf-8"))
que sí que funciona.

El programa quedaría así [1]
No me resisto a pegar una versión hecha con amara [2]  :-P

[1] http://paste2.org/p/965101
[2] http://paste2.org/p/965105

-- lm

> Saludos
>
>
> --
> Mauricio Baeza
>
> 10 años usando OpenOffice.org, libre, gratuito y seguro
> ____________________________
> Todo lo que no es dado es perdido
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


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