我已经看到了关于这个问题的其他线索,但我还没有看到一个帮助我的答案。
我的问题与前一篇文章中使用“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代码中找到了一些内容并且能够修复它。我不知道是否将其纳入了肥皂库。
非常感谢任何帮助。
答案 0 :(得分:1)
它只是无法打印。如果您的终端可以处理utf-8(Mac和最近的Linux),print sr.Title.encode("utf-8")
应该可以正常工作。在Windows上,我认为您可以尝试使用系统代码页进行编码(可能是cp1252) - 但它可能没有必要的字符。
升级到更新版本的Python可能会有所帮助。在2.6和2.7中,我可以打印出unicode字符而无需做任何特殊的事情。