在XML标签/文本中使用特殊字符

时间:2014-03-04 16:14:52

标签: python utf-8 elementtree

因此,一旦我弄明白究竟发生了什么,这个问题基本上就是第一个问题。我读了很多关于编码解码和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标准还是基本上只是另一种解码/编码问题?

1 个答案:

答案 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}}语法。