使用python suds从Web服务响应的Unicode错误

时间:2011-06-02 16:00:03

标签: python unicode utf-8 suds

我已经看到了关于这个问题的其他线索,但我还没有看到一个帮助我的答案。

我的问题与前一篇文章中使用“CJ的可怕网络服务”的人非常相似。

我正在使用python 2.5和suds库(版本0.4.1)。我通过Web服务从数据库请求一些记录。然后我尝试打印返回记录的一些字段。这些记录的某些标题包含导致异常的字符。我得到的例外是:

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编码。 Web服务回复的第一部分是:

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

在另一个帖子中,一个用户说他在suds代码中找到了一些内容并且能够修复它。我不知道是否将其纳入了肥皂库。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

它只是无法打印。如果您的终端可以处理utf-8(Mac和最近的Linux),print sr.Title.encode("utf-8")应该可以正常工作。在Windows上,我认为您可以尝试使用系统代码页进行编码(可能是cp1252) - 但它可能没有必要的字符。

升级到更新版本的Python可能会有所帮助。在2.6和2.7中,我可以打印出unicode字符而无需做任何特殊的事情。