解码并解压缩Base64编码和Gziped压缩文本

时间:2014-11-07 12:57:44

标签: c#-4.0 base64 gzip

我正在尝试从XML节点读取文本。该文本是基于64加密和Gzip压缩。我正在尝试以下方式:

1. XmlNodeList nodeDebugs = xmlDoc.GetElementsByTagName("Debugs");

2.     if (nodeDebugs != null)
3.        {

4.            for (int i = 0; i < nodeDebugs.Count; i++)
5.             {
6.                 XmlNodeList childNodes = nodeDebugs.Item(i).ChildNodes;
7.                 String nodeName = childNodes.Item(i).Name;
8.                 if (nodeName == "Debug")
9.                 {  

10.                 byte[] compressed = System.Text.Encoding.UTF8.GetBytes(childNodes.Item(i).InnerText.Trim());

11.  using (var uncompressed = new MemoryStream())
12.  using (var inStream = new MemoryStream(compressed))
13.  using (var outStream = new GZipStream(inStream, CompressionMode.Decompress))
14.  {
15.      outStream .CopyTo(uncompressed);
16.      Console.WriteLine(Encoding.UTF8.GetString(uncompressed.ToArray()));
17.  }

在第15行获取错误,因为“gzip标头中的幻数不正确”。 我们非常感谢您解决此问题的任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:1)

这是问题,我怀疑:

byte[] compressed = System.Text.Encoding.UTF8.GetBytes(childNodes.Item(i).InnerText.Trim());

你说你的数据是压缩的,然后是base64编码的...但是你的代码并没有在任何地方使用base64,这是一个巨大的警示标志。我怀疑你想要:

string text = childNodes.Item(i).InnerText.Trim();
byte[] compressed = Convert.FromBase64String(text);

如果没有工作,你应该检查转换的每一步 - 在编码和解码过程中你应该有相同的数据,只是顺序相反。有关详细信息,请参阅我的blog post about diagnosing reversible data transformations - 但希望无论如何上述更改都会解决此问题。