Unicode ошибка при ответе от веб-сервиса с использованием python suds

1

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

Моя проблема очень похожа на человека, использующего "CJ ужасные веб-службы" в предыдущем сообщении.

Я использую 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(), я вижу, что есть некоторые символы кавычки double-, которые имеют код 8220 и 8221. Это то, что вызывает ошибку (первая цитата double- в позиции 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 double- в ascii double- кавычки как-то.

Веб-служба говорит, что использует utf- 8 enoding. Первая часть ответа от веб-службы:

 <?xml version="1.0" encoding="UTF-8" ?> 
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

В другом потоке один пользователь сказал, что нашел что-то в коде suds и смог его исправить. Я не знаю, было ли это включено в библиотеку пены.

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

Теги:
unicode
utf-8
suds

1 ответ

1

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

Модернизация до более новой версии Python может помочь. В версиях 2.6 и 2.7 я могу печатать символы Unicode без необходимости делать что-то особенное.

  • 0
    Пробовал с Python 2.7. Та же проблема. Пробовал кодировать ('cp1252') и теперь ошибка исчезла, символы двойных кавычек заменяются вертикальным блоком. Как мне узнать, какая у меня системная кодовая страница?
  • 0
    Если ваш системный язык - английский, вероятно, это 1252. См. Msdn.microsoft.com/en-us/goglobal/bb964654 . Возможно, консольный шрифт не имеет умных кавычек. Я не пользуюсь Windows, поэтому не могу с этим сильно помочь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню