【问题标题】:Unicode error on response from web service using python suds使用 python suds 响应来自 Web 服务的 Unicode 错误
【发布时间】:2011-06-02 16:00:02
【问题描述】:

我已经看过关于这个问题的其他帖子,但我还没有看到对我有帮助的答案。

我的问题与上一篇文章中使用“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 代码中发现了一些东西并且能够修复它。我不知道这是否被纳入了 suds 库。

任何帮助将不胜感激。

【问题讨论】:

    标签: python unicode utf-8 suds


    【解决方案1】:

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

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

    【讨论】:

    • 用 Python 2.7 试过了。同样的问题。尝试了 encode('cp1252') ,现在错误消失了,双引号字符被替换为垂直块。如何找出我的系统代码页是什么?
    • 如果您的系统语言是英语,则可能是 1252。请参阅 msdn.microsoft.com/en-us/goglobal/bb964654 。不过,也许控制台字体没有智能引号字符。我不使用 Windows,所以对此我帮不上什么忙。
    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2012-07-29
    相关资源
    最近更新 更多