2014-10-31 90 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的所有值,因此非常适合发送。