因此,一旦我弄明白究竟发生了什么,这个问题基本上就是第一个问题。我读了很多关于编码解码和XML标准的内容,但我没有找到这个特定主题的答案。
import elementtree.ElementTree as ET
root = ET.Element("Prüfung")
main = ET.SubElement(root,'Test')
main.text='\xe4 '+'ä'.decode('UTF-8')
tree=ET.ElementTree(root)
tree.write('testout.xml')
我的第一个问题是main.text='\xe4 '+'ä'.decode('UTF-8')
行。我明白,\ xe4是字母ä的代码,所以这是否意味着,我必须将传递给我的解释器的每个字符串解码为utf-8才能正常工作?因为当我使用python的readline方法从.txt文件中读取特殊字符时,它们似乎已经正确解码。
一个相关但略有不同的问题是第root = ET.Element("Prüfung")
行。似乎不可能在XML标签中使用非ASCII字符(至少不能使用元素树)。这是因为XML标准还是基本上只是另一种解码/编码问题?
答案 0 :(得分:1)
您可以在元素名称(和元素内容)中包含非ASCII字符。使用Unicode字符串,它应该工作。
在http://effbot.org/zone/element.htm#the-element-type,它说:
所有元素必须具有标记,但所有其他属性都是可选的。所有字符串可以是Unicode字符串,也可以是仅包含US-ASCII的8位字符串。
演示程序(使用Python 2.7测试):
# coding: utf-8
import xml.etree.ElementTree as ET
root = ET.Element(u'Prüfung')
main = ET.SubElement(root, 'Test')
main.text = u'\xe4 ' + u'ä'
tree = ET.ElementTree(root)
tree.write('testout.xml', encoding="utf-8") # The default encoding is us-ascii
输出(在testout.xml中):
<Prüfung><Test>ä ä</Test></Prüfung>
上述程序在Python 3.3+中也没有改变。前导u
个字符是冗余的,但允许({3}} u'unicode'
语法为{3.3}中str
个对象的{{1}}语法。