2014-10-31 38 views
0

解壓縮字符串,從PHP壓縮我有一個PHP腳本,將我的個人資料如下:VB.NET:通過

$output = base64_encode(gzencode('Hallo Welt',9)); 

我得到這個從HTTP請求轉換爲字符串。

這是我到VB.NET:

H4sIAAAAAAACC/NIzMnJVwhPzSkBAHUUKFAKAAAA

每次嘗試的System.IO.Compression.GZipStream的幫助下解壓縮這個似乎沒有工作。

任何人都可以幫我嗎?先謝謝你。

+0

VB中的輸出是什麼? – UnLoCo 2014-10-31 07:46:51

+1

您是否注意到該字符串也是base64編碼的? PHP gzencode可能會返回一個字節數組,然後轉換爲base64字符串進行發送。首先將字符串轉換回('System.Convert.FromBase64String(stringyouget)'),然後將gzstream與字節數組一起使用。 – Jens 2014-10-31 08:19:13

回答

0

正如我在我的評論中寫到的:PHP代碼首先使用GZip壓縮文本,然後將結果字節轉換爲base64字符串。在解壓縮之前,您需要反轉base64進程。這是它在VB中的工作原理:

'Convert base64 string to byte array 
Dim bytes As Byte() = System.Convert.FromBase64String("H4sIAAAAAAACC/NIzMnJVwhPzSkBAHUUKFAKAAAA") 

'Standard GZipStream code for decompression 
Using ms As New IO.MemoryStream(bytes) 
    Using gzs As New System.IO.Compression.GZipStream(ms, IO.Compression.CompressionMode.Decompress) 
     Using rdr As New IO.StreamReader(gzs) 
      Console.WriteLine(rdr.ReadToEnd) 
     End Using 'rdr 
    End Using 'gzs 
End Using 'ms 
Console.ReadKey() 

它會再次產生輸入字符串「Hallo Welt」。

當您通過基於文本的系統發送字節數組時,將字節數組轉換爲base64是一個不錯的主意,因爲您沒有文本編碼和不可打印字符的問題。 Base64使用可打印的符號子集來表示0-255的所有值,因此非常適合發送。