Unicode ошибка при ответе от веб-сервиса с использованием python suds - PullRequest
1 голос
/ 02 июня 2011

Я видел другие темы об этой проблеме, но я не видел ответа, который помог бы мне.

Моя проблема очень похожа на человека, использующего "ужасные веб-сервисы 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.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 02 июня 2011

Это просто не в состоянии печатать.Если ваш терминал может обрабатывать utf-8 (Mac и самый последний Linux), print sr.Title.encode("utf-8") должно работать.В Windows, я думаю, вы можете попробовать кодирование с помощью вашей системной кодовой страницы (вероятно, cp1252) - но в ней могут отсутствовать необходимые символы.

Может помочь обновление до более новой версии Python.В 2.6 и 2.7 я могу распечатывать символы Юникода, не делая ничего особенного.

...