c# - 在 C# 中解压文本

标签 c# zip gzip compression

我遇到了一个让我头疼的问题,我正在尝试以这种格式解压缩文本:

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/

相关文章:

c# - Elasticsearch.net NEST无法过滤URL

c# - 什么是 GINA dll

java - 创建 ZipFile,需要初始化,但初始化需要处理异常

Python在没有文件的情况下解压内存中的gzip数据

c# - Visual Studio Extensibility Package 没有查看正确的项目

python - Python Pandas 中的 Zip 错误消息 - Anaconda

Php Zip 操作

http - Content-Encoding : gzip 需要注意的事项

google-maps - Google PageSpeed 要求我对由 Google 托管的文件启用压缩

c# - 如何将音频数据与时间相关联