Запретить xml .etree писать специальные символы как код HTML - PullRequest
0 голосов
/ 14 июля 2020

В моем коде я изменяю некоторые XML и записываю их в выходные файлы. К сожалению, xml .etree преобразует некоторые специальные символы в символы HTML, как вы можете видеть ниже. Есть ли способ избежать этого? Если это невозможно с xml .etree, я открыт для других Python XML библиотек.

import xml.etree.ElementTree as ET

xml = ET.fromstring("<Item a='ë'/>")

print(ET.tostring(xml))
# b'<Item a="&#235;" />'

1 Ответ

1 голос
/ 14 июля 2020

ElementTree по умолчанию используется кодировка US-ASCII. Невозможно представить ë в US-ASCII, поэтому он возвращается к представлению символа как объекта, &#235;.

Решение простое:

print(ET.tostring(xml, encoding='unicode'))
# => '<Item a="ë" />'

Примечание Это даст вам str, а не bytes, но без параметра encoding вы получите байты, как вы можете видеть в вашем собственном примере.

Чтобы записать XML в файл или отправить по сети, нужно преобразовать в байты. Используйте кодировку Unicode, например UTF-8:

print(ET.tostring(xml, encoding='utf-8'))
# => b'<Item a="\xc3\xab" />'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...