我遇到了一个让我头疼的问题,我正在尝试以这种格式解压缩文本:
eJx7v3t/QWJxcXl+UQoAJ94F3Q==
我遇到的问题是它在这个网站上运行得很棒: http://www.unit-conversion.info/texttools/compress/
但我似乎无法让它与 C# 一起工作,我尝试过 Gzip 和 Zip,但它们都会抛出无效数据错误。
using (Stream fs = GenerateStreamFromString("eJx7v3t/QWJxcXl+UQoAJ94F3Q=="))
{
using (ZipArchive zip = new ZipArchive(fs, ZipArchiveMode.Read))
{
//Do stuff
}
}
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
它在 ZipArchive 行上显示无效数据的错误,它应该解压缩为“密码”,但我不确定为什么它不起作用。
如果有人知道原因或另一个可以工作的库,我很想知道!
谢谢!
编辑
我尝试了 LZW 算法,但没有成功,我认为它是 zip,因为 header 表明它是 gzipped,但由于缺乏文档,我不确定数据是如何压缩的。
这是我的 LZW 示例代码。
byte[] decodedBytes = Convert.FromBase64String("eJx7v3t/QWJxcXl+UQoAJ94F3Q==");
String text = System.Text.Encoding.UTF8.GetString(decodedBytes);
SharpLZW.LZWDecoder test = new SharpLZW.LZWDecoder();
string testval = test.Decode(text);
解码是我收到错误的地方,我尝试过使用和不使用 Base64 转换,以及我能想到的每种编码类型。
有什么想法吗?
最佳答案
这是 zlib 流的 Base-64 编码,不是 gzip,也不是 zip。您可以使用zlib对其进行解码。它解压缩为 ef bb bf 70 61 73 73 77 6f 72 64
。 (最后八个字节是“密码”。)
快速浏览一下文档就会发现 .NET 没有 zlib 解码器。您可以使用 RFC 1950 编写自己的 zlib header 和标尾处理代码,然后使用 DeflateStream 类来解压缩原始压缩数据。虽然你可能 shouldn't use .NET for compression .
我建议查看DotNetZip .
关于c# - 在 C# 中解压文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056353/