使用 python suds 从 Web 服务响应时出现 Unicode 错误

发布于 2024-11-11 18:33:35 字数 1200 浏览 2 评论 0原文

我看过有关此问题的其他帖子,但没有看到对我有帮助的答案。

我的问题与上一篇文章中使用“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 双引号。

Web 服务表示它正在使用 utf-8 编码。从 Web 服务返回的响应的第一部分是:

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

在另一个线程中,一位用户说他在 suds 代码中发现了某些内容并且能够修复它。我不知道这是否已纳入 suds 库中。

任何帮助将不胜感激。

I've seen the other threads about this issue, but I haven't seen an answer that helps me.

My issue is very similar to the person using "CJ's horrible web services" in a previous post.

I'm using python 2.5 and the suds library (version 0.4.1). I request some records from a database through a web service. I then try to print some of the fields of the returned records. Some of the titles of those records contain characters that cause an exception. The exception I get is:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 39: ordinal not in range(128)

My code looks like this: (sr is a Service Request, the type of record I'm retrieving from the DB)

response = client.service.QuerySRByExample(input_data)
for sr in response:
    print sr.SRNumber, sr.Title

If I loop through the offending title using ord(), I can see that there are some double-quote characters that have code point 8220 and 8221. These are what is causing the error (The first double-quote is at position 39 of the title string, as per the error message.)

... 114 111 108 108 101 114 32 65 8221 32 43 32 8220 68 67 78 ...

If I instead use

    print sr.SRNumber, sr.Title.encode('ascii', 'ignore')

I don't get the error. It just drops the offending characters (anything with code point > 127).

Is there a better way to handle this? It seems like I should be able to convert the utf-8 double-quotes into ascii double-quotes somehow.

The web service says it is using utf-8 enoding. The first part of the response back from the web service is:

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

In the other thread, one user said he found something in the suds code and was able to fix it. I don't know if that was incorporated into the suds library.

Any help would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朕就是辣么酷 2024-11-18 18:33:35

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

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

It's just failing to print. If your terminal can handle utf-8 (Macs and most recent Linux), print sr.Title.encode("utf-8") should work. On Windows, I think you can try encoding with your system code page (probably cp1252) - but it might not have the necessary characters.

Upgrading to a newer version of Python might help. In 2.6 and 2.7, I can print out unicode characters without having to do anything special.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文