2013-04-04 26 views
8

Bu okurken ne yaptığımı olduğunu answer here'u okudum ve bu da denedim:Yakut CSV UTF8 kodlama hatası

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

ben aşağıdaki hata ile karşılaştım:

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

Sonra bir Ruby gem geldi - charlock_holmes. Kaynak kodlamasını bulmak için kullanmayı denedim.
CharlockHolmes::EncodingDetector.detect(File.read(file_name)) 
=> {:type=>:text, :encoding=>"windows-1252", :confidence=>37, :language=>"fr"} 

Yani bu yaptı:

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

Ve hala bu var:

dosyanızın geçerli kodlamayı tespit ile sorun var gibi görünüyor
Encoding::UndefinedConversionError: "\x8F" to UTF-8 in conversion from Windows-1252 to UTF-8 
+0

'u kullanabilirsiniz. [Bu] [1] işe yarayabilir. ---- [1]: http://stackoverflow.com/a/9361667/724516 – Vighnesh

+0

Eğer csv dosya yüklemek olabilir mi? –

cevap

4

. CharlockHolmes, :confidence=>37'un kullanışlı ipucunu sunar; bu, algılanan kodlamanın doğru biri olmadığı anlamına gelir.

Hata iletilerini temel alıyor ve test_transcode.rb, https://github.com/MacRuby/MacRuby/blob/master/test-mri/test/ruby/test_transcode.rb Her iki hata iletisinden de geçen kodlamayı buldum. String#encode yardımıyla testin kolay:

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

Sorununuz kesinlikle dosya ile ilgili ve yakut değil gibi görünüyor.

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

başka yolu Iconv*//IGNORE seçeneğini kullanmaktır: durumunda

biz bu durumda, kullanımı ve biz String#encode için :invalid ve :undef params kullanabileceğiniz bazı karakteri gevşek aynı düşüncede oldukları kodlama emin değilseniz

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

oldukça gitmek gerekir CharlockHolmes kaynağı kodlama öneri olarak: hedef kodlama için od.

PS. String.encode ruby ​​1.9'da tanıtıldı. Ruby 1.8 ile Iconv

+0

Yanıt verdiğiniz için teşekkür ederiz. Sorun dosyam ile ilgili olduğundan eminim. Yine de onu ayrışabilmem gerekiyor. Bazı karakterleri kaybetmekle iyi oluyorum. Herhangi bir fikir? – Vighnesh

+0

@Vighnesh bu güncelleme daha anlamlı geliyor mu? – chrmod

+0

ooh güzel! Bu gerçekten kullanışlı görünüyor. Bir şans vereceğim. Çabalarınızı takdir edin! – Vighnesh