2017-03-22 3 views
2

DISCLAIMER: Peoplesoft Wissen ist nicht zwingend erforderlich, um mir dabei zu helfen!Wie in Python einige Daten aufgebläht werden, die von Peoplesoft (Java) deflationiert wurden?

Wie konnte ich die Daten aus, dass People Tabelle extrahieren, aus der PUBDATALONG Spalte? Die Beschreibung der Tabelle ist hier: http://www.go-faster.co.uk/peopletools/psiblogdata.htm

Derzeit i ein Programm verwenden in Java geschrieben und unten ist ein Stück des Codes:

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(); 

Wie kann ich dies mit Python neu schreiben? Es ist eine Frage, die in anderen Formen auf Stackoverflow erschien, aber keine echte Antwort hatte. Ich habe ein grundlegendes Verständnis dafür, was der Code in Java macht, aber ich kenne keine Bibliothek in Python, mit der ich arbeiten könnte, um das Gleiche zu erreichen.

Einige empfohlen zlib, um zu versuchen, wie es mit dem Algorithmus von Java Inflater Klasse verwendet wird, kompatibel ist, aber ich habe es nicht geschafft, dass zu tun. Unter Berücksichtigung der unten Fakten von People Handbuch:

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.

Ich habe versucht, so etwas wie dieses:

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) 

und ich bekomme diese:

zlib.error: Error -3 while decompressing data: incorrect header check

für sicher, ob ich etwas falsch gemacht, aber Ich bin nicht schlau genug, es selbst herauszufinden.

Antwort

2

Diese Zeichenfolge ist nicht Base-64-codiert. Es ist einfach hexadezimal. (Ich habe keine Ahnung, warum es in == endet, wodurch es ein wenig wie eine Base-64-Zeichenfolge aussieht.) Sie sollten in der Lage sein zu sehen, dass es keine Kleinbuchstaben oder Großbuchstaben nach F gibt wie es in einer typischen Base-64-codierten Kette von komprimierten, dh zufällig erscheinenden Daten der Fall wäre.

die Gleichheitszeichen am Ende entfernen und Python .decode("hex") in Python 2 oder bytes.fromhex() in 3.en

+0

i am Ende, dass == hinzugefügt verwenden, mein schlecht. Ich werde versuchen zu tun, was Sie empfohlen haben und lassen Sie es wissen. danke. –

+0

es funktioniert perfekt. danke! –

Verwandte Themen