2011-03-01 9 views
3

Ruby 1.8.7を使用すると、管理アプリケーションであってもcsvを私のシステムに受け入れたいと思っています。私のMacの場合、 "windows csv"オプションを使用してexcelからエクスポートすると、fastercsvはデフォルトでそれを読み取ることができます。ウインドウでは、utf-16でエンコードされたcsvsを取得しているように見えます(まだパースする方法はわかりません)。Rubyのfastercsvと文字エンコーディングの使用

utf8、utf16、asciiにあるcsvをアップロードするのはかなり一般的ですその他のタイプの書式を検出して解析します。誰かがこれを理解しましたか?

は、私が変換するために、Iconvにを使用し、その後、私をdetct助けるためにUniversalDetectorを見て始めたが、これは難しいことのようですし、誰かがそれを考え出した期待していた:)

+0

Rubyのバージョンは質問のエンコードに非常に重要です。私はあなたが1.8.xを使用していると推測しています。なぜなら、fastercsvが1.9.xのコアに組み込まれているからです。 –

+0

はい、1.9.xにも答えがあるかどうか不思議です。 – Joelio

答えて

0

FasterCSV's docsによると、initialize方法は:encodingを取りますオプション:

ファイルを解析するときに使用するエンコード。デフォルトで$ KDOCE設定になります。有効な値:n??? or N?なしの場合、e??? or E ??? EUCの場合、s??? or S? SJIS用、u??? or U? UTF-8用です(Regexp.new()を参照)。

iconvを使用して内容の前処理を行い、CSVに渡すことができます。あなたはiconv( "Iconv")またはそのコマンドライン版に対するRubyのインターフェースを使用することができます。 Iconvは非常に強力で柔軟性があり、UTF-16を他のものに変換することができます。

実際には、ドキュメントのエンコーディングを検出することはより問題になりますが、コマンドラインのバージョンで問題が解決します。私が正しいことを覚えていれば、それはエンコーディングの特定に役立ちますまた、エンコーディング間で変換することもできますし、必要に応じて、ASCIIに変換し、最も近い文字に変換したり、完全に無視したりすることができます。

異なる文字セットを扱う場合、Ruby 1.9.2は1.8.7よりもはるかに優れているため、アップグレードを検討することをお勧めします。また、文字セットやマルチバイト文字を処理するツールや問題にもっと慣れ親しむためには、James Gray's blogsと読んでください。

+0

こんにちは、ありがとう、しかし、私はあなたが私の質問をここでより多くの詳細を再記述していると思う、私の質問は、フレームワーク、プラグイン、宝石、ラッパーなどこれを扱う、それはかなり一般的なビルドしたいユーザーがさまざまな形式のCSVファイルを添付できるようにするアプリケーション... – Joelio

+0

私はそれを行うことができることは認識していません。少なくとも同じ種類の問題を見ていた数年前のことはありませんでした。 iconvには、エンコーディングが何であるかを伝える機能があります。最も可能性の高い容疑者を確認し、最も高い割合を出すように指示することはできますが、それでもエラーが発生しやすく、わからない場合は簡単にだまされます。 CSVは基本的なフォーマットであり、仕様に準拠していないため、通常、アプリ所有者は、その日の気まぐれに基づいて誰かがそれをスローするようなものではなく、サポートされているエンコーディングを指定します。 –

関連する問題