ElementTree
по умолчанию используется кодировка US-ASCII. Невозможно представить ë
в US-ASCII, поэтому он возвращается к представлению символа как объекта, ë
.
Решение простое:
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" />'