6

Vagrant仮想ボックス内の基本的なUbuntulucid32イメージでRuby1.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解凍ユーティリティは、アーカイブを正常に解凍します。ある種のエンコーディング関連のものかどうか疑問に思っていましたが(開発でPostgreSQLを使用するのが面倒にならないようにするため、ロケールはen_US.UTF-8に設定されています)、それが当てはまるかどうかを判断する方法がわかりません。このエラーの原因に関する情報が見つかりません。

4

1 に答える 1

10

これは、ランダムデータをインフレータに供給するときに見られる典型的なエラーです。実際、このエラーはランダムデータから約1/4の時間で発生します(最初のバイトの下位3ビットが000または001の場合)。したがって、何らかの理由でインフレが間違ったバイトから始まっているだけだと思います。

于 2012-05-14T16:10:19.230 に答える