【问题标题】:not in gzip format (Zlib::GzipFile::Error) - while decompressing the gzip file in Ruby不是 gzip 格式 (Zlib::GzipFile::Error) - 在 Ruby 中解压缩 gzip 文件时
【发布时间】:2012-09-25 16:47:19
【问题描述】:

我正在尝试使用以下 Ruby 代码解压缩文件。

File.open("file_compressed.gz") do |compressed|
  File.open("file_decomp","w") do |decompressed|
    gz = Zlib::GzipReader.new(compressed)
    result = gz.read
    decompressed.write(result)
    gz.close
  end
end

但我收到以下错误 -

 not in gzip format (Zlib::GzipFile::Error)
 ./features/support/abc/abc_file.rb:44:in `initialize'

当我在 Mac 上使用 gzip 命令解压同一个文件时,它产生了正确的未压缩输出。 对于以下命令,我可以看到 -

 $file file_compressed.gz
 file_compressed.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT)

在使用 Zlib 创建压缩文件时,是否需要放置任何标头数据?因为当我使用 inflate 方法而不是 GzipReader 我得到以下错误 -

 incorrect header check (Zlib::DataError)
  ./features/support/abc/abc_file.rb:69:in `inflate'

【问题讨论】:

    标签: ruby zlib


    【解决方案1】:

    如果您使用的平台不使用LF 分隔符,而是使用CR+LF,则可能需要以二进制模式打开文件进行读取:

    File.open("file_compressed.gz", "rb") do |compressed|
      # ...
    end
    

    这也应避免将输入流解释为 8 位二进制以外的任何内容。

    请务必使用 "wb" 作为标志以相同的方式打开您的输出文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2019-05-30
      • 2010-12-22
      相关资源
      最近更新 更多