Краткое обновление к вышесказанному: я только что еще раз критически посмотрел на мой код и понял, что есть еще более простое решение (в значительной степени основанное на ответе @ Дункана), которое, по крайней мере, работает для меня.
В моем исходном коде я использовал ссылки на сущности, чтобы получить представление ASCII некоторого текста в кодировке Latin-15 (который я читал из двоичного файла).Таким образом, вышеприведенная переменная someText
фактически начала свою жизнь как байтовый объект, который впоследствии был декодирован в текст Latin-15 и, наконец, преобразован в ASCII.
Благодаря @Duncan и @Inerdial теперь я знаю, что ElementTree может выполнять преобразование Latin-15 в ASCII само по себе.После некоторых экспериментов мне удалось придумать решение, которое было бы глупо простым, хотя и почти тривиальным.Тем не менее, я думаю, что это просто может быть полезным для некоторых, поэтому я решил поделиться этим здесь в любом случае:
import sys
import xml.etree.ElementTree as ET
def main():
# Bytes object
someBytes=b'Str\xf6m'
# Decode to Latin-15
someText=someBytes.decode('iso-8859-15','strict')
# Create element object
testElement=ET.Element('rubbish')
# Add someText to element's text attribute
testElement.text=someText
# Convert element to xml-formatted text string
testElementAsString=ET.tostring(testElement,'ascii', 'xml').decode('ascii')
print(testElementAsString)
main()
Обратите внимание, что я добавил окончательный .decode("ascii")
, чтобы сделатьэта работа с Python 3 (который, в отличие от Python 2.7, возвращает testElementAsString
как объект байтов).
Еще раз спасибо @Duncan, @Inerdial и @Tomalak за указание мне в правильном направлении, и @RikПогги за исправление форматирования в моем оригинальном посте!