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

Mauricio Baeza mauricio en correolibre.net
Mie Ago 25 10:02:47 CEST 2010


El mié, 25-08-2010 a las 09:34 +0200, Chema Cortes escribió:

> El 24 de agosto de 2010 19:05, Mauricio Baeza
> <mauricio en correolibre.net> escribió:
> > Estoy haciendo mis primeros programas en Python y tengo la siguiente duda. Si hago:
> >
> > $ python3 actualizarxml.py
> >
> > El archivo se actualiza bien. Pero si hago:
> >
> > $ python actualizarxml.py
> >
> > Me muestra el siguiente mensaje de error y el archivo XML lo deja trunco.
> >
> > Traceback (most recent call last):
> >   File "actualizarxml.py", line 13, in <module>
> >     domDoc.writexml(xml_file)
> >   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1746, in writexml
> >     node.writexml(writer, indent, addindent, newl)
> >   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 816, in writexml
> >     _write_data(writer, attrs[a_name].value)
> >   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 306, in _write_data
> >     writer.write(data)
> > UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 41: ordinal not in range(128)
> 
> Aquí te dice que estás intentando escribir caracteres unicode en un
> fichero ascii.
> 
> > La ultima línea me hizo pensar en algún caracter extraño pero el archivo es generado correctamente por la misma librería y donde se corta el XML son caracteres válidos, aquí el código que estoy usando:
> >
> > # This Python file uses the following encoding: utf-8
> > from xml.dom import minidom
> >
> > archivo = open('sellob64.txt', 'r')
> > sello = archivo.read()
> > archivo.close()
> >
> > domDoc = minidom.parse('Factura.xml')
> > nodo = domDoc.getElementsByTagName('Comprobante')
> > nodo[0].setAttribute('sello',sello)
> >
> > archivo = open('Factura.xml', 'w')
> > domDoc.writexml(archivo)
> > archivo.close()
> 
> En python3 todo texto es unicode y los ficheros de texto usan la
> codificación por defecto del sistema (utf8) si no especificas otra
> cosa. Para abrir ficheros utf8 en python 2.x se tiene que usar el
> módulo codecs.
> 
> archivo=codecs.open("Factura.xml","w",encoding="utf8")


Perdón el correo anterior lo envié incompleto... decía...

Estimado Chema:

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.


Saludos y de nuevo gracias.



-- 
Mauricio Baeza

10 años usando OpenOffice.org, libre, gratuito y seguro
____________________________
Todo lo que no es dado es perdido
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100825/fa98e035/attachment.html>


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