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

> El 24 de agosto de 2010 19:05, Mauricio Baeza
> <mauri...@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")


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 las siguiente líneas:



-- 
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@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a