2

当我尝试通过 suds 方法发送 Zipfile 内容时出现以下错误

'ascii' codec can't decode byte 0x8c in position 10: ordinal not in range(128)

这是我的代码:

try:
    project_archive = open(os.path.join(settings.MEDIA_ROOT, 'zip/project.zip'), "rb")
    data = project_archive.read()
    client = Client(settings.UPLOAD_PROJECT_WS_URL)
    client.service.uploadProject(data)
except Exception as e:
    return HttpResponse(e)
else:
    return HttpResponse("Project was exported")
4

3 回答 3

1

suds 不支持soap文件附件(不是我上次检查的,已经有一段时间了)。

在这里解决: https ://fedorahosted.org/suds/attachment/ticket/350/soap_attachments.2.py

或使用不同的库

于 2013-05-27T06:50:49.587 回答
1

假设在 WSDL 中的参数类型是xsd:base64Binary,您需要:

client.service.uploadProject(base64.b64encode(data))    

在我的情况下,服务器是用 JAX-WS 编写的,函数参数类型是Byte[]Base64 为我工作

于 2015-08-19T08:33:57.750 回答
0

问题似乎很简单,您正在尝试使用 ascii 编解码器读取 unicode 格式的文件。有关 unicode 的官方文档,请参阅http://docs.python.org/2/howto/unicode.html。您还可以查看Unicode (UTF-8) 在 Python 中读取和写入文件以进行类似讨论。

简而言之,对于您的问题,以下代码应该可以工作:

import codecs
project_archive = codecs.open(os.path.join(settings.MEDIA_ROOT, 'zip/project.zip'), 
                              "rb", "utf-8")
data = project_archive.read()

在上述解决方案中,它假设使用的 unicode 编码是utf-8. 如果正在使用其他一些编解码器(例如ISO-8859-1),则替换utf-8.

于 2013-05-27T07:04:47.127 回答