chr*_*ris 7 python soap wsdl suds
我正在努力与Commission Junction(CJ)的HORRIBLE网络服务合作.我可以让客户端连接并从CJ接收信息,但是他们的数据库似乎包含一堆导致UnicideDecodeError的坏字符.
现在我在做:
from suds.client import Client
wsdlLink = 'https://link-search.api.cj.com/wsdl/version2/linkSearchServiceV2.wsdl'
client = Client(wsdlLink)
result = client.service.searchLinks(developerKey='XXX', websiteId='XXX', promotionType='coupon')
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到我打出一个类似'CorpNet®10%Off Off Service'的记录,然后®导致它破坏我得到
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 758: ordinal not in range(128)" error.
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的头上对®进行编码,这样当SUDS读入结果时它不会中断?
更新:澄清一下,®来自CJ数据库,并在他们的回复中.所以我需要在SUDS处理响应之前解码非ascii字符.我不确定在SUD中如何(或是否)这样做.
尝试添加 str 和 unicode 对象时会遇到隐式 UnicodeDecodeErrors。然后,Python 将尝试将 str 解码为 unicode,但使用 ASCII 编码。如果您的 str 包含任何非 ASCII 的内容,您将收到此错误。
您的解决方案是手动解码它,如下所示:
thestring = thestring.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
尽可能尝试解码任何可能出现的字符串包含非 ascii 字符的字符串,只要您从任何模块中获取它,在本例中就是肥皂水。
然后,如果 suds 无法处理 Unicode(可能是这种情况),请确保在将文本返回给 suds 之前对其进行编码(或任何其他在给它 unicode 时会损坏的库)。
那应该很好地解决问题。这可能是一个很大的变化,因为您需要将所有内部处理从 str 转移到 unicode,但这是值得的。:)