如何红宝石解压gzip字符串?(How to decompress Gzip string in r

2019-07-04 05:46发布

ZLIB :: GzipReader可以采取 “一个IO,或IO状,对象”。 因为它的输入,如在文档中阐明。

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

我应该如何ungzip一个字符串?

Answer 1:

上述方法不适合我的工作。
我一直得到incorrect header check (Zlib::DataError)错误。 显然,它假定您在默认情况下一个标题,它可能并不总是如此。

我实现的解决办法是:

require 'zlib'
require 'stringio'
gz = Zlib::GzipReader.new(StringIO.new(resp.body.to_s))    
uncompressed_string = gz.read


Answer 2:

通过您的压缩数据中包含一个头默认asumes的Zlib。 如果您的数据不包含头它会通过引发的Zlib :: DataError失败。

你可以告诉的Zlib承担数据必须通过以下解决方法没有头:

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


Answer 3:

你需要的Zlib ::充气一个字符串的解压缩和zlib ::放气进行压缩

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


Answer 4:

的zstream = zlib的:: Inflate.new(16 +的zlib :: MAX_WBITS)



Answer 5:

在Rails中,你可以使用:

  • ActiveSupport::Gzip.compress("my string")
  • ActiveSupport::Gzip.decompress()


Answer 6:

使用(-Zlib::MAX_WBITS)我得到了ERROR: invalid code lengths setERROR: invalid block type
对我来说,只有以下工作了。

Zlib::GzipReader.new(StringIO.new(response_body)).read


Answer 7:

为了用gunzip内容,使用下面的代码(在1.9.2测试)

Zlib::GzipReader.new(StringIO.new(content), :external_encoding => content.encoding).read

谨防编码问题



Answer 8:

我们不需要任何额外的参数,这些天。 有deflateinflate类的方法,允许快速oneliners这样的:

>> 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!"

我认为回答这个问题:“我应该如何ungzip一个字符串?” 最好的。 :)



Answer 9:

我用上面的答案使用的Zlib ::放气

我一直得到破碎的文件(小文件),并花了很多时间来弄清楚这个问题可以使用固定的:

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


文章来源: How to decompress Gzip string in ruby?
标签: ruby gzip zlib