4

我有一个 C# 应用程序,我使用 SharpZipLib 对一个很长的字符串进行放气,然后将数据以放气字节 [] 的 Base64 字符串发送到 PHP 服务。

出于某种原因,当尝试在 PHP 端对其进行 Inflate 时,它​​返回一个错误:'gzinflate: data error'。

如何在 PHP 中对压缩后的字符串进行膨胀?

这是 C# 代码:

    byte[] sIn = System.Text.UTF8Encoding.UTF8.GetBytes(data);

    MemoryStream rawDataStream = new MemoryStream();
    GZipOutputStream gzipOut = new GZipOutputStream(rawDataStream);
    gzipOut.IsStreamOwner = false;

    gzipOut.Write(sIn, 0, sIn.Length);
    gzipOut.Close();

    byte[] compressed = rawDataStream.ToArray();

    // data sent to the php service
    string b64 = Convert.ToBase64String(compressed);

PHP代码:

    $inflated = base64_decode($_POST['data']);

    // crash here
    $inflated = gzinflate($inflated);

提前致谢!

4

1 回答 1

1

不能真正说出为什么它会失败,GZipOutStream尽管我猜它正在做其他事情,然后只是纯deflate压缩。我将您的代码更改为使用DeflateStreamSystem.IO.Compression然后它就像一个魅力。

byte[] sIn = UTF8Encoding.UTF8.GetBytes("testing some shit");

MemoryStream rawDataStream = new MemoryStream();
DeflateStream gzipOut = new DeflateStream(rawDataStream, CompressionMode.Compress);

gzipOut.Write(sIn, 0, sIn.Length);
gzipOut.Close();

byte[] compressed = rawDataStream.ToArray();

// data sent to the php service
string b64 = Convert.ToBase64String(compressed);

编辑

由于问题是关于对 Windows Phone 项目使用压缩,我也尝试使用DeflateStreamSharpCompress并且它工作得很好,你只需要更改你正在使用的命名空间,类是相同的。

于 2012-09-29T20:20:22.040 回答