C#使用Ionic.Zlib解码base64 Zlib字符串

时间:2015-01-20 16:24:50

标签: c# mono base64 zlib ionic

我尝试解码XML中的压缩字符串而没有任何成功: 基本上我想解码并取回已解码的字符串。

这是包含压缩数据的xml节点:

<data encoding="base64" compression="zlib">
   eJztmNkKwjAQRaN9cAPrAq5Yq3Xf6vVIbQJjEZR+nDwQZScrwztoORECLySBcIgZ7nc2y4KfyWDLx+Jb9nViNgDEwY+KioAXUgQN4+zpoCMwPmQAtoAx2CLFbA2oDEo9+hwG8DnIDtF/2K8ks086Tw2zH0uyMv7HcRr/6/EvvhnsPrsrxwX7rwU/0ODig/eV3mh3N1ld8eraWPaX6+64s9McesfrqcHfg1MpoifxcVEWjukyw+9AtFPl/I71pER3Of6j4bv7HI54s+MChhqLlPdZ/P3qMmFuo5h5NnTOhjM5tReN2yT51n5/v7J3F0vi46fk+ne7aX0i9l6If7mpufTX3f5wsqv9TAD2fJLT9VrTn7UeZnM5tR+v0LMQOHXwFnxe2/warGFRWf8QDjOLfP
  </data>

由于Unity和Mono(我正在研究的环境),我无法使用System.IO.Compression。 所以我实现了Ionic.Zlib。

这是语法:

public static string DecodeBase64Gzip(string input) 
{       
  byte[ ] ZlibBuffer = Convert.FromBase64String(input);
  MemoryStream comp = new MemoryStream(ZlibBuffer);
  Stream zlib = new Ionic.Zlib.ZlibStream (comp, Ionic.Zlib.CompressionMode.Decompress);
  return new System.IO.StreamReader (zlib, System.Text.Encoding.UTF8).ReadToEnd();
}

我确实犯了一些错误,因为输出时我得到一个空字符串。

我也这样做了:

public static string DecodeBase64Zlib(string input)
    {
        byte[ ] ZlibBuffer = Convert.FromBase64String(input);
        return ZlibStream.UncompressString (ZlibBuffer);
}

但结果相同(空字符串......)

你有什么建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

“这是我的压缩数据的xml节点”。你是如何压缩数据的?它以某种方式搞砸了。在base64解码后(顺便说一下,它没有正确终止),数据以有效的zlib头开始,但后面跟着无效的deflate数据。