Jes*_*ter 3 c# xml zip base64 unzip
这可能是一个非常本地化的问题,对社区其他人没用,但希望有人可以帮助我.
我知道的
我在XML元素中有一个字符串中的base64编码ZIP.
该文件如下所示:
<Document>
<Content vesion="1"><!-- BASE64 STRING ---></Content>
</Document>
Run Code Online (Sandbox Code Playgroud)
我想做的事
解码字符串,然后解压缩.
到目前为止我尝试了什么(并且失败了)
解码base64字符串并将其放在带有zip扩展名的文件中
public string DecodeFrom64(string encodedData)
{
byte[] encodedDataAsBytes
= System.Convert.FromBase64String(encodedData);
string returnValue =
System.Text.Encoding.Unicode.GetString(encodedDataAsBytes);
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)试图用函数解压缩字符串:
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);
}
}
Run Code Online (Sandbox Code Playgroud)得到错误:
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)得到错误:
块长度与其补码不匹配...
我发送邮件给那些将这些XML数据发送给我的客户的人,但问题是他们的响应非常慢(3-4周).
所以我希望有人能指出我正确的方向.
我无法将文件附加到问题中,所以如果有人想看看它,我可以发送邮件或其他什么?
正如哈罗德在评论中已经指出的那样,这都是错的.在你的最后一条评论(Jester)中,你澄清了zip文件首先被转换为字符串,然后该字符串被转换为base64字符串.因为这绝对没有意义(你为什么要这样做),我想你在那里遇到了错误,并且真的意味着文件被转换为base64字符串.这是电子邮件的最佳实践,例如,我最近一直在通过XMPP中的XML传输文件.我的猜测是......
byte[] file = System.Convert.FromBase64String(encodedData);
File.WriteAllBytes(directoryToWriteTo+filename+".zip", file);
Run Code Online (Sandbox Code Playgroud)
...创建您正在寻找的文件.byte []这里已经是一个zip文件.由于zip文件处理起来很麻烦(因为你没有真正说出那些内容),我建议将这些字节保存到文件中并尝试使用像WinRar这样的zip软件打开它.如果这有效并且您可以从zip文件中获取文件内容,则可以询问另一个问题如何获取内容.我还建议使用SharpZipLib.dll,因为它确实是我到目前为止在合理时间内工作的唯一解决方案.