如何在Python中膨胀一些被Peoplesoft(Java)压缩的数据?

如何在Python中膨胀一些被Peoplesoft(Java)压缩的数据?,java,guid,deflate,inflate,peoplesoft,Java,Guid,Deflate,Inflate,Peoplesoft,免责声明:Peoplesoft知识不是帮助我完成这项工作的必备知识 如何从Peoplesoft表中,从PUBDATALONG列中提取数据? 该表的说明如下: 目前我正在使用一个用Java编写的程序,下面是一段代码: Inflater inflater = new Inflater(); byte[] result = new byte[rs.getInt("UNCOMPDATALEN")]; inflater.setInput(rs.getBytes("PUBDATALONG")); int

免责声明:Peoplesoft知识不是帮助我完成这项工作的必备知识

如何从Peoplesoft表中,从PUBDATALONG列中提取数据? 该表的说明如下:

目前我正在使用一个用Java编写的程序,下面是一段代码:

Inflater inflater = new Inflater();
byte[] result = new byte[rs.getInt("UNCOMPDATALEN")];
inflater.setInput(rs.getBytes("PUBDATALONG"));
int length = inflater.inflate(result);

System.out.println(new String(result, 0, length, "UTF-8"));
System.out.println();
System.out.println("-----");
System.out.println();
我如何使用Python重写这个? 这是一个在Stackoverflow上以其他形式出现但没有真正答案的问题。 我对Java中的代码有基本的了解,但我不知道可以使用Python中的任何库来实现同样的功能

有些人建议尝试zlib,因为它与Java充气器类使用的算法兼容,但我没有成功做到这一点。 考虑PeopleSoft手册中的以下事实:

当PeopleSoft数据库接收到消息时,XML数据 转换为UTF-8以防止任何UCS2字节顺序问题。它是 在存储到中之前,也使用deflate算法进行压缩 数据库

我试过这样的方法:

import zlib
import base64


UNCOMPDATALEN = 362 #this value is taken from the DB and is the dimension of the data after decompression.
PUBDATALONG = '789CB3B1AFC8CD51284B2D2ACECCCFB35532D43350B2B7E3E5B2F130F40C8977770D8977F4710D0A890F0E710C090D8EF70F0D09080DB183C8BAF938BAC707FBBBFB783ADA19DAE86388D904B90687FAC0F4DAD940CD70F67771B533B0D147E6DAE8A3A9D5C76B3F00E2F4355C=='


print zlib.decompress(base64.b64decode(PUBDATALONG), 0, 362)
我明白了:

zlib.error:解压缩数据时出错-3:标头检查不正确


当然,我做错了什么,但我没有足够的聪明来自己找出答案。

那个字符串不是Base-64编码的。它只是十六进制。(我不知道为什么它以
==
结尾,这使它看起来有点像Base-64字符串。)通过检查,您应该能够看到,在
F
之后没有小写字母,或者在这个问题上,在压缩的典型Base-64编码字符串(即随机出现的数据)中也没有大写字母


删除末尾的等号,并在Python 2中使用
.decode(“hex”)
,或在Python 3中使用
bytes.fromhex()

我在末尾添加了==我的坏代码。我会尽力按照你的建议去做,并让你知道。非常感谢。