2012-01-15 56 views
1

我試圖用cElementTree保存編碼爲UTF-16的XML文件。這是相同的項目,但不同於DOCTYPE問題:How to create <!DOCTYPE> with Python's cElementTree如何將ElementTree保存爲UTF-16

我知道如果我不在字符串中聲明編碼,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文件?

回答

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

P.S.由於ElementTree模塊的接口被lxml庫複製,因此導入ElementTreeetree是一個好主意。如果您需要更強大的lxml功能,這將允許減少更改。