Я запускаю приложение Rails (3.2.3) с Ruby 1.9.3p194 на базовом образе Ubuntu lucid32 в виртуальном ящике Vagrant. Виртуальная коробка работает на Леопарде, чего бы это ни стоило. Я пытаюсь использовать 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 в dev менее болезненным), но я не знаю, как определить, так ли это. Я не могу найти никакой информации о том, что может вызвать эту ошибку.