免責事項:Peoplesoftの知識は私にこれを手助けするために必須ではありません!Peoplesoft(Java)によって収縮されたデータをPythonで膨らませるには?
PubDATALONG列からPeoplesoftテーブルからデータを抽出するにはどうすればよいですか?テーブルの 説明はここでされています。現在、私はJavaで書かれたプログラムを使用して、以下のコードの一部ですしています http://www.go-faster.co.uk/peopletools/psiblogdata.htm
:
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 Inflaterクラスで使用されているアルゴリズムと互換性がありますが、それを成功させることはできませんでした。私はこのような何かしようとした
When the message is received by the PeopleSoft database, the XML data is converted to UTF-8 to prevent any UCS2 byte order issues. It is also compressed using the deflate algorithm prior to storage in the database.
:
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)
を、私はこれを取得: は、PeopleSoftのマニュアルから、以下の事実を考えると、私は間違って何かを確かに
zlib.error: Error -3 while decompressing data: incorrect header check
をが、私は自分でそれを理解するほどスマートではない。
で最後に等号を削除するとPython 2で
.decode("hex")
を使用するか、またはbytes.fromhex()
。 私はあなたが推薦したことをやろうとし、あなたに知らせるつもりです。 ありがとうございます。 –それは完全に動作します。 ありがとうございます! –