Python base64.decode 在Windows上似乎不起作用
我正在使用一个网络服务(用Java写的),这个服务基本上返回一个字节数组(在SOAP中相当于经过base64编码的二进制数据)。
我在使用Python的suds库,下面的代码在我的Mac上运行得很好(在Windows的Cygwin环境下也可以),但是在普通的Windows上(Python 2.6.5)解码却不成功。我主要是做Java开发的,所以任何帮助都非常感谢。
from suds.client import Client import base64,os,shutil,tarfile,StringIO u = "user" p = "password" url = "https://xxxx/?wsdl" client = Client(url, username=u, password=p) bin = client.service.getTargz("test") f = open("tools.tar.gz", "w") f.write(base64.b64decode(bin.encode('ASCII'))) f.close() print "finished writing" tarfile.open("tools.tar.gz").extractall()
在Mac上运行得很好,但在Windows上却出现了这个错误:
C:\client>python client.py xml Getting the sysprep file from the webservice finished writing Traceback (most recent call last): File "client.py", line 28, in tarfile.open("tools.tar.gz").extractall() File "C:\Python26\lib\tarfile.py", line 1653, in open return func(name, "r", fileobj, **kwargs) File "C:\Python26\lib\tarfile.py", line 1720, in gzopen **kwargs) File "C:\Python26\lib\tarfile.py", line 1698, in taropen return cls(name, mode, fileobj, **kwargs) File "C:\Python26\lib\tarfile.py", line 1571, in __init__ self.firstmember = self.next() File "C:\Python26\lib\tarfile.py", line 2317, in next tarinfo = self.tarinfo.fromtarfile(self) File "C:\Python26\lib\tarfile.py", line 1235, in fromtarfile buf = tarfile.fileobj.read(BLOCKSIZE) File "C:\Python26\lib\gzip.py", line 219, in read self._read(readsize) File "C:\Python26\lib\gzip.py", line 271, in _read uncompress = self.decompress.decompress(buf) zlib.error: Error -3 while decompressing: invalid distance too far back
1 个回答
7
尝试一下
f = open("tools.tar.gz", "wb")
告诉Python这是一个二进制文件是非常重要的(在Python 3中,这在类Unix系统上也变得很重要,但在Python 2中在这些系统上并不是严格需要的,这就是为什么你的代码在MacOSX上能正常工作):默认情况下,Python认为你要处理的是文本文件,而在Windows系统上,写入的每个\n
会在磁盘上变成\r\n
。