在 C# 中解压文本
Decompressing text in C#
我遇到了一个问题,我正在尝试解压缩这种格式的文本:
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 行上显示无效数据的错误,它应该解压缩到 "password" 但我不确定为什么它不起作用。
如果有人知道为什么或另一个库可以工作,我很想知道!
谢谢!
编辑
我尝试了 LZW 算法,但没有成功,我认为它是 zip,因为 header 说它是 gzip 压缩的,但由于缺少文档,我不确定数据是如何压缩的。
这是我的 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 转换,也尝试了我能想到的每种编码类型。
有什么想法吗?
看起来你的压缩文本是 Base64 字符串,你可以先尝试 base64 到二进制对话,然后再尝试 zip 库。
您link 声称其使用的压缩算法是 unix compress
的网站。
Compress is a Unix based compress program. Once a file is compressed using Compress, you can restore the file to its original state with the uncompress utility. Uncompress restores attributes of a compressed file
A brief bit of research 得出结论这是 LZW 压缩。
Compress is a Unix shell compression program based on the LZW compression algorithm.
您需要此的 .NET 实现 - SharpLZW 是我找到的第一个。
压缩程序使用的是unix压缩软件
http://en.wikipedia.org/wiki/Compress
Compress is a Unix shell compression program based on the LZW compression algorithm.[1] Compared to more modern compression utilities such as gzip and bzip2, compress performs faster and with less memory usage, at the cost of a significantly lower compression ratio.
我搜索了一些预构建的库并找到了 http://www.codeproject.com/Articles/6838/LZW-Compression Since th algorithm is actually in the public domain you could build it yourself for fun. :D A link to the implementation is: http://warp.povusers.org/EfficientLZW/
eJx7v3t/QWJxcXl+UQoAJ94F3Q==
看起来像一个 base64 编码的字符串。在尝试解压缩之前,您需要使用 proper method 对其进行解码。
byte[] decodedBytes = Convert.FromBase64String("eJx7v3t/QWJxcXl+UQoAJ94F3Q==");
不幸的是,还有一个问题:压缩数据不是 zip 存档。 , it's LZW compression. SharpLZW 是一个可以在 .Net 中读取的库示例。
我认为您 Base64
编码不是 Zip 格式。尝试这样的事情:
var bytes = Convert.FromBase64String("eJx7v3t/QWJxcXl+UQoAJ94F3Q==");
var text = Encoding.ASCII.GetString(bytes);
我不知道 ASCII 编码是否是这里的正确选择,因为解码后的文本是:
x?{?{Abqqy~Q '??
也许你必须使用 zip。
这是 zlib 流的 Base-64 编码,不是 gzip,也不是 zip。您可以使用 zlib 对其进行解码。它解压缩到 ef bb bf 70 61 73 73 77 6f 72 64
。 (最后八个字节是"password"。)
快速阅读文档表明 .NET 没有 zlib 解码器。您可以使用 RFC 1950 编写自己的 zlib header 和尾部处理代码,然后使用 DeflateStream class 来解压缩原始压缩数据。虽然你可能 shouldn't use .NET for compression.
我建议查看 DotNetZip。
我遇到了一个问题,我正在尝试解压缩这种格式的文本:
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 行上显示无效数据的错误,它应该解压缩到 "password" 但我不确定为什么它不起作用。
如果有人知道为什么或另一个库可以工作,我很想知道!
谢谢!
编辑
我尝试了 LZW 算法,但没有成功,我认为它是 zip,因为 header 说它是 gzip 压缩的,但由于缺少文档,我不确定数据是如何压缩的。
这是我的 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 转换,也尝试了我能想到的每种编码类型。
有什么想法吗?
看起来你的压缩文本是 Base64 字符串,你可以先尝试 base64 到二进制对话,然后再尝试 zip 库。
您link 声称其使用的压缩算法是 unix compress
的网站。
Compress is a Unix based compress program. Once a file is compressed using Compress, you can restore the file to its original state with the uncompress utility. Uncompress restores attributes of a compressed file
A brief bit of research 得出结论这是 LZW 压缩。
Compress is a Unix shell compression program based on the LZW compression algorithm.
您需要此的 .NET 实现 - SharpLZW 是我找到的第一个。
压缩程序使用的是unix压缩软件
http://en.wikipedia.org/wiki/Compress
Compress is a Unix shell compression program based on the LZW compression algorithm.[1] Compared to more modern compression utilities such as gzip and bzip2, compress performs faster and with less memory usage, at the cost of a significantly lower compression ratio.
我搜索了一些预构建的库并找到了 http://www.codeproject.com/Articles/6838/LZW-Compression Since th algorithm is actually in the public domain you could build it yourself for fun. :D A link to the implementation is: http://warp.povusers.org/EfficientLZW/
eJx7v3t/QWJxcXl+UQoAJ94F3Q==
看起来像一个 base64 编码的字符串。在尝试解压缩之前,您需要使用 proper method 对其进行解码。
byte[] decodedBytes = Convert.FromBase64String("eJx7v3t/QWJxcXl+UQoAJ94F3Q==");
不幸的是,还有一个问题:压缩数据不是 zip 存档。
我认为您 Base64
编码不是 Zip 格式。尝试这样的事情:
var bytes = Convert.FromBase64String("eJx7v3t/QWJxcXl+UQoAJ94F3Q==");
var text = Encoding.ASCII.GetString(bytes);
我不知道 ASCII 编码是否是这里的正确选择,因为解码后的文本是:
x?{?{Abqqy~Q '??
也许你必须使用 zip。
这是 zlib 流的 Base-64 编码,不是 gzip,也不是 zip。您可以使用 zlib 对其进行解码。它解压缩到 ef bb bf 70 61 73 73 77 6f 72 64
。 (最后八个字节是"password"。)
快速阅读文档表明 .NET 没有 zlib 解码器。您可以使用 RFC 1950 编写自己的 zlib header 和尾部处理代码,然后使用 DeflateStream class 来解压缩原始压缩数据。虽然你可能 shouldn't use .NET for compression.
我建议查看 DotNetZip。