Python 将其写入文件时发生XML编码错误

Python 将其写入文件时发生XML编码错误,python,xml,character-encoding,Python,Xml,Character Encoding,我认为我采用的方法是正确的,但仍然会出现编码错误: from xml.dom.minidom import Document import codecs doc = Document() wml = doc.createElement("wml") doc.appendChild(wml) property = doc.createElement("property") wml.appendChild(property) descriptionNode = doc.createElemen

我认为我采用的方法是正确的,但仍然会出现编码错误:

from xml.dom.minidom import Document
import codecs

doc = Document()
wml = doc.createElement("wml")
doc.appendChild(wml)

property = doc.createElement("property")
wml.appendChild(property)

descriptionNode = doc.createElement("description")
property.appendChild(descriptionNode)
descriptionText = doc.createTextNode(description.decode('ISO-8859-1'))
descriptionNode.appendChild(descriptionText)

file = codecs.open('contentFinal.xml', 'w', encoding='ISO-8859-1')
file.write(doc.toprettyxml())
file.close()
Traceback (most recent call last):
File "main.py", line 467, in <module>
    file.write(doc.toprettyxml())
File "C:\Python27\lib\xml\dom\minidom.py", line 60, in toprettyxml
    return writer.getvalue()
File "C:\Python27\lib\StringIO.py", line 271, in getvalue
    self.buf += ''.join(self.buflist)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 10: ordinal not in range(128)
描述节点包含ISO-8859-1编码中的一些字符,这是站点自身在元标记中指定的编码。但是当
doc.toprettyxml()
开始在文件中写入时,我得到了以下错误:

from xml.dom.minidom import Document
import codecs

doc = Document()
wml = doc.createElement("wml")
doc.appendChild(wml)

property = doc.createElement("property")
wml.appendChild(property)

descriptionNode = doc.createElement("description")
property.appendChild(descriptionNode)
descriptionText = doc.createTextNode(description.decode('ISO-8859-1'))
descriptionNode.appendChild(descriptionText)

file = codecs.open('contentFinal.xml', 'w', encoding='ISO-8859-1')
file.write(doc.toprettyxml())
file.close()
Traceback (most recent call last):
File "main.py", line 467, in <module>
    file.write(doc.toprettyxml())
File "C:\Python27\lib\xml\dom\minidom.py", line 60, in toprettyxml
    return writer.getvalue()
File "C:\Python27\lib\StringIO.py", line 271, in getvalue
    self.buf += ''.join(self.buflist)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 10: ordinal not in range(128)

这可能有冲突吗?

好的,我找到了解决方案。当数据使用其他外国语言时,您只需要在xml头中定义正确的编码。您不需要在
file.write(doc.toprettyxml(encoding='ISO-8859-1'))
中描述编码,即使在打开文件以编写
file=codecs.open('contentFinal.xml','w',encoding='ISO-8859-1')
时也不需要。下面是我使用的技术。也许这不是一个专业的方法,但对我来说很有效

file = codecs.open('abc.xml', 'w')
xm = doc.toprettyxml()
xm = xm.replace('<?xml version="1.0" ?>', '<?xml version="1.0" encoding="ISO-8859-1"?>')
file.write(xm)
file.close()
file=codecs.open('abc.xml','w')
xm=doc.toprettyxml()
xm=xm.替换(“”,“”)
file.write(xm)
file.close()文件
可能有一种方法可以在标题中设置默认编码,但我找不到它。
上述方法不会给浏览器带来任何错误,所有数据都能完美显示。

我认为Python声明不是问题所在。你能把描述的内容贴出来吗?比如说,如果我们在内容中有这个词,
Orientación
,我们就会出错。该网站使用的是
espanol语言
。不了解内容,因为它在写入文件之前失败。若我根本不使用编码,那个么它会写入到文件中,但浏览器不接受,并且他们不断地说,
行上的错误,
列上的错误,
听起来像是您的
描述
对象是字节字符串,而不是字符串。