【问题标题】:VB.NET : Decompress a String, compressed from PHP viaVB.NET:解压缩一个字符串,通过 PHP 压缩
【发布时间】:2014-10-31 07:44:41
【问题描述】:

我有一个 PHP 脚本,它会向我发送如下信息:

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

我从 HTTP 请求中将它转换为字符串。

这是我进入 VB.NET 的内容:

H4sIAAAAAAACC/NIzMnJVwhPzSkBAHUUKFAKAAAA

每次在System.IO.Compression.GZipStream 的帮助下尝试解压似乎都行不通。

谁能帮帮我?提前谢谢你。

【问题讨论】:

  • VB 的输出是什么?
  • 你注意到字符串也是base64编码的吗? PHP gzencode 可能会返回一个字节数组,然后将其转换为 base64 字符串以进行发送。首先将字符串转换回 (System.Convert.FromBase64String(stringyouget)),然后将 gzstream 与字节数组一起使用。

标签: php vb.net gzip compression gzipstream


【解决方案1】:

正如我在评论中所写: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 之间的所有值,因此非常适合发送。

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多