tah*_*oar 1 python xml elementtree
我正在尝试使用 cElementTree 保存编码为 UTF-16 的 XML 文件。这是同一个项目,但与以下中的 DOCTYPE 问题不同:How to create <!DOCTYPE> with Python's cElementTree
我了解到,如果我没有在字符串中声明编码,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')
Run Code Online (Sandbox Code Playgroud)
当我用 UTF-8 编写文件时,一切都很好。但是,当我更改为 UTF-16 时,文本编码已损坏。它还缺少所需的字节顺序标记。当我尝试将 BOM 添加到字符串的开头时,
s = '\xFF\xFE<?xml version=\"1.0\"......
Run Code Online (Sandbox Code Playgroud)
ElementTree 报告错误“格式不正确(无效标记)第 1 行第 1 列”。
所有缓冲区都是 unicode 数据。如何保存为 UTF-16 XML 文件?
resultstring = ElementTree.tostring(tree, encoding='utf-16')
Run Code Online (Sandbox Code Playgroud)
PS 由于 ElementTree 模块的接口由 lxml 库复制,因此最好导入ElementTree为etree. 如果您需要更强大的lxml功能,这将可以减少更改。