ruby - 在 Ruby 中压缩 Gzip 字符串

标签 ruby compression gzip deflate

我如何编写一个方法来压缩不包含头文件的 Gzip 字符串,并使其完全压缩到解压缩之前的状态。原始压缩是在 C# 中完成的,我使用以下方法在 Ruby 中进行膨胀:

编辑:基本上,我想要匹配的 deflate 方法到这个 inflate:

def inflate(string)
    zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
    buf = zstream.inflate(string)
    zstream.finish
    zstream.close
    buf
end

解压前字符串为:

"5\x891\n\xC30\x10\x04{\xBDb\xEB\xE0F&\x81\xA4\xCA3\xDC\xA81\xD2\x1A]\xA1\x13\xB1.\x100\xFEF\xDE\e\x19\x9Cb\x99Yf\xCA\xB3A\x1A,\x13\xB1\x96R\x15I\x96\x85+5\x12\xA2=\xF4:\xAFb\xB9\xD0$\xA2\xF1\xF5>\xDA\xD3\xB9\x9A\xA8f\xFC\xD8\xE6\xFD\x00\x7F\xEB{\f!Uk{\xCF,\x91\xDC\x1C\x10J\xC4\xF7z\xCA\xE8p9\xF8\xFF\xF7\x93\xDEw\xD9\x7F"

使用inflate解压后为:

    "What is the common difference in this arithmetic sequence?\n\n\\indenttext{11, 15, 19,\\dots}\n\n\\emcee{\n  \\mc \x964\n  \\mc 2\n *\\mc 4\n  \\mc 8\n  \\mc 11\n  }"

我尝试过创建多个 deflate 方法,但没有一个可以将其恢复到原始状态。感谢您的帮助!

编辑:原始压缩是使用以下内容在 .NET 2.0 中完成的

byte[] compressedStringBytes = CompressGzipString(String);

而 CompressGzipString 的作用是:

MemoryStream compressed = new MemoryStream();
DeflaterOutputStream zosCompressed = new DeflaterOutputStream(compressed, new Deflater(Deflater.BEST_COMPRESSION, true));
zosCompressed.Write(data, 0, data.Length);

如果不可能得到准确的原始压缩,那么最标准化的压缩是什么,我的意思是通用的,并且能够以与原始压缩相同的方式解压缩?

最佳答案

这实际上取决于 C# 中它是如何压缩的;在 .NET 4.5 之前,C# 中的 System.IO.DeflateStream/GZipStream 类使用 Microsoft 的 DEFLATE 实现,该实现与 zlib 显着不同(这意味着您可能无法使用 zlib 轻松模拟它)。在几乎所有情况下,情况都更糟,因此在 .NET 4.5 中,他们将其替换为 zlib,它应该能够与 Ruby 中的功能相匹配。

如果您知道生成字符串的 C# 版本,您可以确定是否可以返回原始字节。如果它是使用 .NET 4.5 生成的,您应该能够使用相同的设置执行标准 deflate 以获得相同的字节。

关于ruby - 在 Ruby 中压缩 Gzip 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14058733/

相关文章:

android - 如何压缩Camera.takepicture拍摄的照片

javascript - 如何从使用 gzip 编码的服务器在 Rhino 中加载 javascript 库?

java - GZIP 吃掉换行符

zip - 恢复损坏的 zip 或 gzip 文件?

ruby - 如何从 Ruby 中的特定相对路径加载文件?

r - 在 R 中自动读取 zip 文件

ruby-on-rails - 无法安装 sqlite3 并运行捆绑安装

c# - 最佳 .NET Framework 压缩类?

ruby-on-rails - 是否有基于一组参数生成 URL 的 Ruby 库/gem?

ruby - 将 Ruby 字符串编码为 JSON 字符串