Python UnicodeEncodeError в ElementTree.parse () - PullRequest
0 голосов
/ 10 мая 2018

Я пишу интерфейс 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?

И, конечно, как я могу это исправить?

1 Ответ

0 голосов
/ 10 мая 2018

Это Python API. Проблема в том, что сервер возвращает юникод, потому что API не помещает Content-Type: text/html; charset=utf-8 в заголовок. Я могу закодировать тело в UTF-8 после того, как оно получено, и тогда оно работает. Или, может быть, я могу исправить API, чтобы сделать это.

...