Я пытаюсь реализовать веб-сервис SOAP в Python 2.6 с использованием библиотеки suds . Это работает хорошо, но я столкнулся с проблемой при попытке проанализировать вывод с lxml .
Suds возвращает объект suds.sax.text.Text
с ответом от службы SOAP. Класс suds.sax.text.Text
является подклассом встроенного в Python класса Unicode . По сути, это было бы сравнимо с этим утверждением Python:
u'<?xml version="1.0" encoding="utf-8" ?><root><lotsofelements \></root>'
Что неуместно, поскольку, если декларация XML верна, содержимое кодируется в UTF-8, и, таким образом, не объект Python Unicode (потому что они хранятся в некоторой внутренней кодировке, такой как UCS4).
lxml откажется анализировать это, как задокументировано , поскольку нет четкого ответа на то, какую кодировку следует интерпретировать как.
На мой взгляд, есть два выхода из этой привязки:
- Снять декларацию
<?xml>
, включая кодировку.
- Преобразовать выходные данные из Suds в строку байтов, используя указанную кодировку.
В настоящее время данные, которые я получаю от веб-сервиса, находятся в пределах ASCII-диапазона, так что любой из этих способов будет работать, но оба эти варианта кажутся мне ужасными, и я не совсем уверен, что произойдет, если Я начинаю получать данные, для которых требуется более широкий диапазон символов Юникода.
Есть хорошие идеи? Я не могу себе представить, что я первый в этой позиции ...