Я пишу интерфейс Python для API. Интерфейс должен использовать python 2.7.x, использование python 3.x невозможно.
API вызывается через requests
запрос. В конкретном случае у меня возникла проблема с сообщением об ошибке:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 24037: ordinal not in range(128)
Я попробовал несколько прогрессивно менее наивных подходов, чтобы справиться с этим. Все терпят неудачу.
1
tree = ElementTree().parse( StringIO(apiResult.body) )
2
parser = XMLParser(encoding="UTF-8")
tree = ElementTree().parse( StringIO(apiResult.body), parser=parser )
3.
parser = XMLParser(encoding="ISO-8859-1")
tree = ElementTree().parse( StringIO(apiResult.body), parser=parser )
Все сбой с сообщением об ошибке, показанным выше. Во всех случаях apiResult.body
является строкой. Мой вопрос: почему кодек ascii вызывается в случаях 2 и 3, когда я явно использую парсер с кодировкой, отличной от ascii?
И, конечно, как я могу это исправить?