2013-04-04 41 views
8

を読みながら、これは私がやっていたものです。RubyのCSV UTF8エンコーディング・エラー

csv = CSV.open(file_name, "r") 

私はテストのためにこれを使用:

line = csv.shift 
while not line.nil? 
    puts line 
    line = csv.shift 
end 

そして、私はこれに走った:

ArgumentError: invalid byte sequence in UTF-8 

私はanswer hereを読んで、これは私が試したものです

charlock_holmes - それから私は、Rubyの宝石に出くわした

Encoding::UndefinedConversionError: "\x98" to UTF-8 in conversion from Windows-1251 to UTF-8 

csv = CSV.open(file_name, "r", encoding: "windows-1251:utf-8") 

は、私は次のようなエラーに遭遇しました。私はそれを使ってソースエンコーディングを見つけようとしていました。

CharlockHolmes::EncodingDetector.detect(File.read(file_name)) 
=> {:type=>:text, :encoding=>"windows-1252", :confidence=>37, :language=>"fr"} 

だから私はこのでした:

csv = CSV.open(file_name, "r", encoding: "windows-1252:utf-8") 

をそして、まだこの得た:あなたは、ファイルの有効なエンコーディングを検出に問題があるように見えます

Encoding::UndefinedConversionError: "\x8F" to UTF-8 in conversion from Windows-1252 to UTF-8 
+0

[this] [1]のように動作するかもしれません。 ---- [1]:http://stackoverflow.com/a/9361667/724516 – Vighnesh

+0

あなたのcsvファイルをアップロードしてもらえますか? –

答えて

4

を。 CharlockHolmes便利なチップ:confidence=>37を提供しています。これは単に検出されたエンコードが正しいものではないことを意味します。

エラーメッセージのベースとtest_transcode.rbからhttps://github.com/MacRuby/MacRuby/blob/master/test-mri/test/ruby/test_transcode.rbエラーメッセージの両方を通過するエンコードが見つかりました。 String#encodeの助けを借りて、それはテストするのは簡単です:

"\x8F\x98".encode("UTF-8","cp1256") # => "ڈک" 

あなたの問題は、厳密にファイルに関連するとRubyしていないように見えます。

我々が使用しているエンコーディングがわからないと、私たちはこのような場合には、 String#encodeため :invalid:undefのparamsを使用することができ、いくつかの文字を失うことに同意するものとすることができた場合

"\x8F\x98".encode("UTF-8", "CP1250",:invalid => :replace, :undef => :replace, :replace => "?") # => "Ź?" 

他の方法は、Iconv*//IGNOREオプションを使用することです

Iconv.iconv("UTF-8//IGNORE","CP1250", "\x8F\x98") 

かなり行​​くべきであるCharlockHolmesのソースエンコーディングの提案として:ターゲット・エンコーディングのためのod。

PS。 String.encodeはruby 1.9で導入されました。ルビー1.8を使用すると、Iconv

+0

お返事ありがとうございます。問題は私のファイルに関連していると確信しています。私はまだそれを解析することができる必要があります。私はキャラクターのいくつかを失うことで大丈夫です。何か案が? – Vighnesh

+0

@Vighneshはこのアップデートをより理にかなっていますか? – chrmod

+0

よろしく!これは本当に便利ですね。私はそれを撃つだろう。あなたの努力を感謝します! – Vighnesh

関連する問題