Я пытаюсь сохранить файл XML, закодированный как UTF-16, с помощью cElementTree. Это тот же проект, но он отличается от проблемы DOCTYPE в: Как создать <! DOCTYPE> с помощью cElementTree Python
Я узнал, что если я не объявлю кодировку в строке, 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, все замечательно. Однако, когда я перехожу на UTF-16, кодировка текста повреждена. Также отсутствует требуемый маркер порядка байтов. Когда я пытаюсь добавить спецификацию в начало строки,
s = '\xFF\xFE<?xml version=\"1.0\"......
ElementTree сообщает об ошибке "неправильно сформированная (неверный токен) строка 1, столбец 1".
Все буферы являются данными Unicode. Как сохранить файл XML в формате UTF-16?