1

私は、バイナリ データで ruby​​ を使用することにあまり慣れていません。mechanize を使用して多数の csv ファイルをローカル ディスクにダウンロードしています。次に、これらのファイルで特定の文字列を検索する必要があります。

mechanize で save_as メソッドを使用してファイルを保存します (ファイルをバイナリとして保存します)。ファイルのコンテンツ タイプ (mechanize による) は次のとおりです。

application/vnd.ms-excel;charset=x-UTF-16LE-BOM

ここから、ファイルの読み方がわかりません。Rubyで通常のファイルとして読み込もうとしましたが、バイナリデータしか取得できません。また、標準の UNIX ツール (strings/grep) を使用して検索を試みましたが、うまくいきませんでした。

ファイルの 1 つで「file」コマンドを実行すると、次のようになります。

foo.csv: Little-endian UTF-16 Unicode Pascal program text, with very long lines, with CRLF, CR, LF line terminators

catまたはviでデータを問題なく見ることができます。vi では、いくつかの制御文字も表示されます。

また、csv と fastcsv の両方の Ruby ライブラリを試しましたが、これらに対して「IllegalFormatError」例外が発生します。私も運なしでこの解決策を試しました。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

コマンド 'iconv' を使用して UTF-8 に変換できます。

# iconv -f 'UTF-16LE' -t 'UTF-8' bad_file.csv > good_file.csv

標準ライブラリには iconv のラッパーもあります。これを使用して、ファイルをプログラムに読み取った後にファイルを変換できます。

于 2010-03-16T03:53:38.370 に答える