我尝试解码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);
}
但结果相同(空字符串......)
你有什么建议吗?提前谢谢!
答案 0 :(得分:1)
“这是我的压缩数据的xml节点”。你是如何压缩数据的?它以某种方式搞砸了。在base64解码后(顺便说一下,它没有正确终止),数据以有效的zlib头开始,但后面跟着无效的deflate数据。