我正在尝试使用cElementTree保存编码为UTF-16的XML文件。这是同一个项目,但不同于:How to create <!DOCTYPE> with Python's cElementTree
中的DOCTYPE问题我已经知道如果我没有在字符串中声明编码,cElementTree会添加它。所以,代码是这样的:
import xml.etree.cElementTree as ElementTree
from StringIO import StringIO
s = '<?xml version=\"1.0\" ?><!DOCTYPE tmx SYSTEM \"tmx14a.dtd\" ><tmx version=\"1.4a\" />'
tree = ElementTree.parse(StringIO(s)).getroot()
header = ElementTree.SubElement(tree,'header',{'adminlang': 'EN',})
body = ElementTree.SubElement(tree,'body')
ElementTree.ElementTree(tree).write('myfile.tmx','UTF-16')
当我用UTF-8编写文件时,everthing很棒。但是,当我更改为UTF-16时,文本编码已损坏。它也缺少所需的字节顺序标记。当我尝试将BOM添加到字符串的开头时,
s = '\xFF\xFE<?xml version=\"1.0\"......
ElementTree报告错误“格式不正确(无效标记)第1行第1列”。
所有缓冲区都是unicode数据。如何保存为UTF-16 XML文件?
答案 0 :(得分:4)
resultstring = ElementTree.tostring(tree, encoding='utf-16')
P.S。由于ElementTree模块的接口由lxml库复制,因此最好将ElementTree
导入为etree
。如果您需要更强大的lxml
功能,这将允许减少更改。