3

Ruby 1.8.7 を使用して、自分のシステムに csv を受け入れたいと思っています。これは管理アプリケーションですが、いくつかの異なる種類の csv を取得できるようです。私のMacでは、「windows csv」オプションを使用してExcelからエクスポートすると、fastercsvがデフォルトでそれを読み取ることができます。Windowsでは、utf-16でエンコードされたcsvを取得しているようです(まだ解析する方法がわかりません)

ユーザーが utf8、utf16、ascii などのタイプ形式の csv をアップロードし、それらを検出して解析できるようにすることは、かなり一般的なことのようです。誰かがこれを理解しましたか?

私はUniversalDetectorを調べて検出を助け、次にIconvを使用して変換しましたが、これは難しいようで、誰かがそれを理解することを望んでいました:)

4

1 に答える 1

0

FasterCSV の docsによると、initializeメソッドは:encodingオプションを取ります:

ファイルの解析時に使用するエンコーディング。デフォルトは $KDOCE 設定です。有効な値: n??? orN??? なし、e??? orE??? EUC の場合、s??? orS??? SJIS の場合、およびu??? orU??? UTF-8 の場合 (Regexp.new() を参照)。

iconvそのリストは限られているため、使用して内容の前処理を行い、それらを CSV に渡すことを検討したい場合があります。Ruby の iconv ("Iconv") へのインターフェイス、またはそのコマンドライン バージョンを使用できます。Iconv は非常に強力で柔軟性があり、とりわけ UTF-16 を変換できます。

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

Ruby 1.9.2 は、1.8.7 よりもさまざまな文字セットを処理できるようになっているため、アップグレードを検討することをお勧めします。また、文字セットとマルチバイト文字を扱うツールと問題について詳しく知るには、James Gray のブログを読む必要があります。

于 2011-03-02T03:08:32.410 に答える