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/