2017-03-22 20 views
2

면책 조항 : Peoplesoft의 지식은이 문제를 해결하는데 반드시 필요한 것은 아닙니다!Peoplesoft (Java)에 의해 수축 된 일부 데이터를 파이썬에서 어떻게 팽창시킬 수 있습니까?

어떻게 PubDATALONG 열에서 해당 Peoplesoft 테이블의 데이터를 추출 할 수 있습니까? 테이블의 설명은 여기에 있습니다 : 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(); 

가 어떻게이 사용하는 파이썬를 다시 작성할 수 있을까? Stackoverflow의 다른 양식에 나타난 질문이지만 실제 답변이 없습니다. 나는 코드가 자바에서 무엇을하는지에 대한 기본적인 이해를 가지고 있지만 파이썬에서 어떤 라이브러리도 모른다는 것은 똑같은 것을 성취하기 위해 함께 일할 수있다.

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) 

을하고 난이 얻을 : 뭔가 잘못을 확실히

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

을하지만 피플 설명서에서 아래 사실을 고려 나는 혼자 힘으로 파악할만큼 똑똑하지 않습니다.

답변

2

해당 문자열은 Base-64로 인코딩되지 않습니다. 이것은 단순히 16 진수입니다. (왜 그것이 ==으로 끝나는 지 알지 못합니다. Base-64 문자열처럼 보입니다.) 검사를 통해 소문자가 없거나 대문자가 F 뒤에 오는 것을 볼 수 있어야합니다. 전형적인 Base-64로 압축 된 문자열, 즉 임의로 나타나는 데이터가 있기 때문입니다. 내가 말 ==, 내 나쁜 덧붙였다

파이썬 3

+0

에서 마지막에 등호를 제거하고 파이썬 2 .decode("hex")를 사용하거나 bytes.fromhex(). 나는 당신이 추천 한 것을하려고 노력할 것이며 당신에게 알려줄 것입니다. 감사합니다. –

+0

완벽하게 작동합니다. 감사합니다. –