【发布时间】: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 库。
任何帮助将不胜感激。
【问题讨论】: