В настоящее время я пишу скрипт для конвертирования кучи XML-файлов из разных кодировок в унифицированный UTF-8.Написание XML-заголовка с LXML
я сначала попытаться определить кодировку с помощью LXML:
def get_source_encoding(self):
tree = etree.parse(self.inputfile)
encoding = tree.docinfo.encoding
self.inputfile.seek(0)
return (encoding or '').lower()
Если это пустое, я пытаюсь получить его от chardet
:
def guess_source_encoding(self):
chunk = self.inputfile.read(1024 * 10)
self.inputfile.seek(0)
return chardet.detect(chunk).lower()
то я использую codecs
преобразовать кодировку файла:
def convert_encoding(self, source_encoding, input_filename, output_filename):
chunk_size = 16 * 1024
with codecs.open(input_filename, "rb", source_encoding) as source:
with codecs.open(output_filename, "wb", "utf-8") as destination:
while True:
chunk = source.read(chunk_size)
if not chunk:
break;
destination.write(chunk)
И наконец, я пытаюсь переписать заголовок XML. Если заголовок XML был первоначально
<?xml version="1.0"?>
или
<?xml version="1.0" encoding="windows-1255"?>
Я хотел бы превратить его в
<?xml version="1.0" encoding="UTF-8"?>
Мой текущий код не похоже на работу:
def edit_header(self, input_filename):
output_filename = tempfile.mktemp(suffix=".xml")
with open(input_filename, "rb") as source:
parser = etree.XMLParser(encoding="UTF-8")
tree = etree.parse(source, parser)
with open(output_filename, "wb") as destination:
tree.write(destination, encoding="UTF-8")
Файл, который я сейчас тестировал, имеет заголовок th at не указывает кодировку. Как я могу заставить его правильно выводить заголовок с указанной кодировкой?
Зачем вам нужно, что спецификация кодирования на выходе? –
Мне нравится быть ... подробным об этих вещах. –