Я видел другие темы об этой проблеме, но я не видел ответа, который помог бы мне.
Моя проблема очень похожа на человека, использующего "ужасные веб-сервисы CJ" в предыдущемpost.
Я использую Python 2.5 и библиотеку suds (версия 0.4.1).Я запрашиваю некоторые записи из базы данных через веб-сервис.Затем я пытаюсь распечатать некоторые поля возвращенных записей.Некоторые из названий этих записей содержат символы, которые вызывают исключение.Исключение, которое я получаю:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 39: ordinal not in range(128)
Мой код выглядит следующим образом: (sr - запрос на обслуживание, тип записи, которую я получаю из БД)
response = client.service.QuerySRByExample(input_data)
for sr in response:
print sr.SRNumber, sr.Title
ЕслиЯ перебираю заголовок с ошибкой, используя ord (), я вижу, что есть некоторые двойные кавычки, которые имеют кодовую точку 8220 и 8221. Вот что вызывает ошибку (Первая двойная кавычка находится в позиции 39 заголовкастрока, согласно сообщению об ошибке.)
... 114 111 108 108 101 114 32 65 8221 32 43 32 8220 68 67 78 ...
Если я вместо этого использую
print sr.SRNumber, sr.Title.encode('ascii', 'ignore')
, я не получаю ошибку.Он просто удаляет оскорбительные символы (что-нибудь с кодовой точкой> 127).
Есть ли лучший способ справиться с этим?Похоже, я должен каким-то образом преобразовать двойные кавычки utf-8 в двойные кавычки ascii.
Веб-сервис говорит, что использует кодировку utf-8.Первая часть ответа от веб-сервиса:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
В другом потоке один пользователь сказал, что он нашел что-то в коде suds и смог это исправить.Я не знаю, было ли это включено в библиотеку suds.
Любая помощь будет принята с благодарностью.