2011-06-28 116 views
0

爲了改善客戶端/服務器行爲,我正在尋找適配我的iphone客戶端代碼以進行ziped響應。使用xcode解壓縮SOAP消息

服務器修改ziped的SOAP響應。

我在尋找如何解壓縮響應,但沒有爲我工作。

我研究的第一個解決方案是ZipArchive,解釋爲here,解決方案(來自minizip),但它專注於文件系統壓縮。

而我只需要解壓NSString。

之後,我選中此second approach

NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString]; 
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData]; 
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];  

但對我來說沒有工作,因爲在NSData的dataFromBase64String不存在實際的版本。

現在我正在處理上一個問題的第三個響應,任何人都知道爲了導入Base64.h和NSData + Compression.h需要安裝哪個庫或框架。用於此其他潛力solution

+0

我正在測試chilkat libr ary與相同的結果... :(((http://www.example-code.com/ios/zip.asp。 該解決方案僅適用於文件系統:SSS –

回答

0

解決方案是下一個。

安裝下一個庫到您的項目:

  • Base64.h //你可以找到它here
  • 的NSData + Compression.h //你可以找到它here

使用其中一個的代碼previous solutions

#import "Base64.h" 
#import "NSData+compression.h" 

... 

// decoding the base64 ziped message 
Byte inputData[[stringValue lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; 
[[stringValue dataUsingEncoding:NSUTF8StringEncoding] getBytes:inputData]; 
size_t inputDataSize = (size_t)[stringValue length]; 
size_t outputDataSize = EstimateBas64DecodedDataSize(inputDataSize); 
Byte outputData[outputDataSize];//prepare a Byte[] for the decoded data 
Base64DecodeData(inputData, inputDataSize, outputData, &outputDataSize); 

// inflate the original string using gzip 
NSData *theData = [[NSData alloc] initWithBytes:outputData length:outputDataSize]; 
NSData* result = [theData gzipInflate];//make bigger==gunzip 

// Return the result 
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];