如何将ElementTree保存为UTF-16

时间:2012-01-15 08:45:56

标签: python xml elementtree

我正在尝试使用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文件?

1 个答案:

答案 0 :(得分:4)

resultstring = ElementTree.tostring(tree, encoding='utf-16')

P.S。由于ElementTree模块的接口由lxml库复制,因此最好将ElementTree导入为etree。如果您需要更强大的lxml功能,这将允许减少更改。