我正在Vagrant虚拟盒子中的基本Ubuntu lucid32映像上运行一个带有Ruby 1.9.3p194的Rails(3.2.3)应用程序。虚拟盒子在Leopard上运行,为了它的价值。我正在尝试在应用程序中使用 rubyzip 来解压缩 zip 存档 - 2009_da_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 因为让在开发中使用 PostgreSQL 不那么痛苦),但我不知道如何判断是否是这种情况。我找不到有关可能导致此错误的任何信息。
随机数据提供给膨胀者时发现的典型错误。 实际上,您将从随机数据中获得大约 1/4 的时间(当第一个字节的低三位为 000 或 001 时)。 所以我猜通货膨胀只是出于某种原因从错误的字节开始。