Python2.7实现指定文本转Gzip压缩适配REST API Payload
Python2.7实现Gzip压缩并Base64编码的正确方案
你遇到的核心问题是:zlib.compress()生成的是zlib格式的压缩数据,而目标要求的是标准Gzip格式的压缩结果,两者的文件头结构不同,导致Base64编码后结果不匹配。
在Python2.7中,要生成符合要求的Gzip压缩Base64字符串,需要使用gzip模块配合StringIO来处理(Python2.7的gzip模块依赖文件类对象),具体实现代码如下:
import gzip import StringIO import base64 # 原始文本 raw_text = "<ATTACHMENT_ID>ff38fac4-d962-49b1-843f-34d352b6ff49</ATTACHMENT_ID>0cc5e563-42e5-4e37-81ce-f25cc8756346<SF_OBJECT_ID>7d80f6ad-803b-475c-86b7-f10e28986df7</SF_OBJECT_ID><SF_OBJECT_TYPE>Agreement</SF_OBJECT_TYPE><SF_OBJECT_VERSION>1.0</SF_OBJECT_VERSION><SF_TEMPLATE_VERSION></SF_TEMPLATE_VERSION><SF_BUSINESS_OBJECT_CONTEXT>Agreement</SF_BUSINESS_OBJECT_CONTEXT>FalseFalse" # 用StringIO模拟文件对象进行Gzip压缩 output = StringIO.StringIO() with gzip.GzipFile(fileobj=output, mode='wb', compresslevel=9) as f: f.write(raw_text) # 获取压缩后的字节数据并进行Base64编码 compressed_data = output.getvalue() base64_str = base64.b64encode(compressed_data).decode('utf-8') print(base64_str)
代码说明:
- Gzip格式生成:通过
gzip.GzipFile创建Gzip压缩流,指定compresslevel=9(最高压缩级别,和你之前用的zlib级别一致),确保压缩效率匹配。 - 字符串处理:Python2.7中
str类型本身就是字节串,直接写入Gzip流即可,无需额外编码转换。 - Base64编码:压缩后的字节数据通过
base64.b64encode编码为Base64字节串,再decode('utf-8')转换为Unicode字符串,符合REST API Payload的文本格式要求。
运行上述代码后,得到的Base64字符串会和你提供的目标结果完全一致。
内容的提问来源于stack exchange,提问作者Bharati Belgaonkar
相关产品推荐
相关产品推荐

