如何解压缩rubyGzipstring?
Zlib :: GzipReader可以采用“一个IO或者IO类似的对象”。 因为它是input,如文档中所述。
Zlib::GzipReader.open('hoge.gz') {|gz| print gz.read } File.open('hoge.gz') do |f| gz = Zlib::GzipReader.new(f) print gz.read gz.close end 我应该如何解压一个string?
 上面的方法对我不起作用。 
 我不断收到incorrect header check (Zlib::DataError)错误。 显然它假设你有一个标题默认情况下,可能并不总是如此。 
我实施的工作是:
 require 'zlib' require 'stringio' gz = Zlib::GzipReader.new(StringIO.new(resp.body.to_s)) uncompressed_string = gz.read 
Zlib在默认情况下假设您的压缩数据包含一个标题。 如果你的数据不包含头文件,则会引发Zlib :: DataError失败。
您可以通过以下解决方法告诉Zlib假定数据没有标题:
 def inflate(string) zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS) buf = zstream.inflate(string) zstream.finish zstream.close buf end 
您需要使用Zlib :: Inflate来解压缩string,使用Zlib :: Deflate来压缩
  def inflate(string) zstream = Zlib::Inflate.new buf = zstream.inflate(string) zstream.finish zstream.close buf end 
 我们现在不需要任何额外的参数。 有deflate和inflate类方法,可以这样快速的线索: 
 >> data = "Hello, Zlib!" >> compressed = Zlib::Deflate.deflate(data) => "x\234\363H\315\311\311\327Q\210\312\311LR\004\000\032\305\003\363" >> uncompressed = Zlib::Inflate.inflate(compressed) => "Hello, Zlib!" 
我想它回答了这个问题:“我应该如何解开一个string?” 最好的。 🙂
zstream = Zlib :: Inflate.new(16 + Zlib :: MAX_WBITS)
 使用(-Zlib::MAX_WBITS) ,我得到ERROR: invalid code lengths set和ERROR: invalid block type 
 唯一跟随我的作品也是。 
 Zlib::GzipReader.new(StringIO.new(response_body)).read 
在Rails中,您可以使用:
-  ActiveSupport::Gzip.compress("my string")
-   ActiveSupport::Gzip.decompress()。
我用上面的答案来使用Zlib :: Deflate
我一直在弄破碎的文件(对于小文件),并花了很多小时才能发现问题可以通过以下方式解决:
 buf = zstream.deflate(string,Zlib::FINISH) 
没有zstream.finish线!
 def self.deflate(string) zstream = Zlib::Deflate.new buf = zstream.deflate(string,Zlib::FINISH) zstream.close buf end 
对于gunzip内容,请使用以下代码(在1.9.2上testing)
 Zlib::GzipReader.new(StringIO.new(content), :external_encoding => content.encoding).read 
谨防编码问题