2017-03-22 11 views
2

免責事項: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

をが、私は自分でそれを理解するほどスマートではない。

答えて

2

その文字列はBase-64でエンコードされていません。これは単純に16進数です。 (なぜそれが==で終わっているのか分かりませんが、これはBase-64文字列のように見えます)検査では、小文字はありません。大文字はF圧縮された、すなわちランダムに出現するデータの典型的なBase-64で符号化された文字列が存在するためです。私が最後に==、私の悪いことを追加

は、Python 3

+0

で最後に等号を削除するとPython 2で.decode("hex")を使用するか、またはbytes.fromhex()。 私はあなたが推薦したことをやろうとし、あなたに知らせるつもりです。 ありがとうございます。 –

+0

それは完全に動作します。 ありがとうございます! –

関連する問題