Ruby 什么可以解释“一个”呢;无效的存储块长度“;错误?

Ruby 什么可以解释“一个”呢;无效的存储块长度“;错误?,ruby,zlib,rubyzip,Ruby,Zlib,Rubyzip,我正在运行一个Rails(3.2.3)应用程序,其中Ruby 1.9.3p194位于一个流浪的虚拟盒子中的基本UbuntuLucid32映像上。虚拟盒子在Leopard上运行,这是值得的。我正在尝试在应用程序中使用rubyzip来解压缩zip存档-2009\u da\u lmp.zip。直接使用rubyzip存储库中示例中的代码,我可以确认我可以列出归档文件内容: #f is the absolute path to 2009_da_lmp.zip (string) Zip::ZipFile.o

我正在运行一个Rails(3.2.3)应用程序,其中Ruby 1.9.3p194位于一个流浪的虚拟盒子中的基本UbuntuLucid32映像上。虚拟盒子在Leopard上运行,这是值得的。我正在尝试在应用程序中使用rubyzip来解压缩zip存档-
2009\u da\u lmp.zip
。直接使用rubyzip存储库中示例中的代码,我可以确认我可以列出归档文件内容:

#f is the absolute path to 2009_da_lmp.zip (string)
Zip::ZipFile.open(f) { |zf| zf.entries[0] }  
 => 20090101_da_lmp.csv #that is indeed a file in the archive.
使用存储库中示例中的更多代码,我尝试获取存档中的实际文件:

Zip::ZipInputStream.open(f) { |zis|
  entry = zis.get_next_entry
  print "first line of '#{entry.name}' (#{entry.size} bytes: ) "
  puts "'#{zis.gets.chomp}'" }

=> first line of '20090101_da_lmp.csv' (826610 bytes: ) Zlib::DataError: 
   invalid stored block lengths #and a long stack trace I can provide 
                                #if that might help

Mac OS解压实用程序可以很好地解压归档文件。我想知道这是否与编码有关(我的语言环境设置为en_US.UTF-8,因为这样可以减少在dev中使用PostgreSQL的痛苦),但我不知道如何判断情况是否如此。我找不到任何可能导致此错误的信息。

这是向充气机提供随机数据时发现的典型错误。事实上,大约有1/4的时间你会从随机数据中得到这个错误(当第一个字节的低三位是000或001时)。所以我猜通货膨胀只是因为某种原因从错误的字节开始。

谢谢马克。这帮助我确认了我对文件已损坏的怀疑。我想我早期在rubyzip上的失误是无意中将一些东西写入了归档文件,但我之前用Mac OS解压器成功地解压了它,所以我感到困惑。删除损坏的文件并用一个新文件替换它就成功了。