这可能是一个非常本地化的问题对社区其他人没用,但希望有人可以帮助我。
我所知道的
我在XML元素中有一个字符串中的base64编码ZIP。
该文件如下所示:
<Document>
<Content vesion="1"><!-- BASE64 STRING ---></Content>
</Document>
我想做什么
解码字符串,然后将其解压缩。
到目前为止我尝试了什么(并且失败了)
解码base64字符串并将其放入带有zip扩展名的文件
public string DecodeFrom64(string encodedData)
{
byte[] encodedDataAsBytes
= System.Convert.FromBase64String(encodedData);
string returnValue =
System.Text.Encoding.Unicode.GetString(encodedDataAsBytes);
return returnValue;
}
尝试使用函数解压缩字符串:
public static string DecompressString(string compressedText)
{
byte[] gZipBuffer = Convert.FromBase64String(compressedText);
using (var memoryStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);
var buffer = new byte[dataLength];
memoryStream.Position = 0;
using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
{
gZipStream.Read(buffer, 0, buffer.Length);
}
return Encoding.UTF8.GetString(buffer);
}
}
得到错误:
GZip标头中的幻数不正确。确保您传入GZip流...
试图用函数解压缩字符串:
public static string UnZipStr(string compressedText)
{
byte[] input = Convert.FromBase64String(compressedText);
using (MemoryStream inputStream = new MemoryStream(input))
{
using (DeflateStream gzip =
new DeflateStream(inputStream, CompressionMode.Decompress))
{
using (StreamReader reader =
new StreamReader(gzip, System.Text.Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
}
}
得到错误:
块长度与其补码不匹配...
我发送了一封邮件给那些将这些XML数据发送给我的客户的人,但问题是他们回复的速度很慢(3-4周)。
所以我希望有人能指出我正确的方向。
我无法将文件附加到问题中,所以如果有人想查看它我可以发送邮件或其他什么内容?
答案 0 :(得分:5)
正如哈罗德在评论中已经指出的那样,这都是错的。在你的最后一条评论(Jester)中,你澄清了zip文件首先被转换为字符串,然后该字符串被转换为base64字符串。因为这绝对没有意义(为什么你应该这样做),我想你在那里遇到了一些错误,并且意味着该文件被转换为base64字符串。这是电子邮件的最佳实践,例如,我最近一直在通过XMPP中的XML传输文件。我的猜测是......
byte[] file = System.Convert.FromBase64String(encodedData);
File.WriteAllBytes(directoryToWriteTo+filename+".zip", file);
...创建您正在寻找的文件。 byte []这里已经是一个zip文件。由于zip文件处理起来很麻烦(因为你没有真正说出那些内容),我建议将这些字节保存到文件中并尝试使用像WinRar这样的zip软件打开它。如果这有效并且您可以从zip文件中获取文件内容,则可以询问另一个问题如何获取内容。我还建议使用SharpZipLib.dll,因为它确实是我到目前为止在合理时间内工作的唯一解决方案。