11

私のアプリ (Rails 3.0.5、Ruby 1.8.7) で、ファイルから CSV データをインポートするインポート ツールを作成しました。

問題: Excel から CSV ファイルを UTF-8 エンコーディングでエクスポートするようにユーザーに依頼しましたが、ほとんどの場合、実行されません。

インポートする前にファイルが UTF-8 かどうかを確認するにはどうすればよいですか? それ以外の場合、インポートは実行されますが、奇妙な結果が得られます。FasterCSV を使用してインポートします。

不適切な CSV ファイルの例:

;VallÈe du RhÙne;CÙte Rotie;

ありがとう。

4

2 に答える 2

27

Ruby の文字エンコーディング検出ライブラリである Charlock Holmes を使用できます。

https://github.com/brianmario/charlock_holmes

それを使用するには、ファイルを読み取り、detectメソッドを使用するだけです。

contents = File.read('test.xml')
detection = CharlockHolmes::EncodingDetector.detect(contents)
# => {:encoding => 'UTF-8', :confidence => 100, :type => :text}

正しい形式でない場合は、エンコーディングを UTF-8 に変換することもできます。

utf8_encoded_content = CharlockHolmes::Converter.convert contents, detection[:encoding], 'UTF-8'

これにより、ユーザーは再度アップロードする前に自分で行う必要がなくなります。

于 2012-09-02T07:37:18.693 に答える
5

1.9 の場合は明らかです。utf8 を期待するように指示するだけで、そうでない場合はエラーが発生します。

begin
  lines = CSV.read('bad.csv', :encoding => 'utf-8')
rescue ArgumentError
  puts "My users don't listen to me!"
end
于 2012-09-02T08:16:43.250 に答える