2013-04-04 8 views
8

यह पढ़ने मैं क्या कर रहा था है मैंने answer here पढ़ा है और यही मैंने कोशिश की हैरूबी सीएसवी UTF8 एन्कोडिंग त्रुटि

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

मैं निम्नलिखित त्रुटि का सामना किया:

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

तो मैं एक रूबी मणि भर में आया था - charlock_holmes। मैंने सोचा कि मैं स्रोत एन्कोडिंग खोजने के लिए इसका उपयोग करने की कोशिश करूंगा।

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

का उपयोग कर सकते हैं [यह] [1] काम कर सकता है। ---- [1]: http://stackoverflow.com/a/9361667/724516 – Vighnesh

+0

आप अपनी CSV फ़ाइल अपलोड कर सकते हैं? –

उत्तर

4

ऐसा लगता है कि आप अपनी फ़ाइल की वैध एन्कोडिंग का पता लगाने के साथ समस्या है। चार्लॉक होम्स आपको :confidence=>37 की उपयोगी युक्ति प्रदान करता है जिसका अर्थ है कि पता लगाया गया एन्कोडिंग सही नहीं हो सकता है।

https://github.com/MacRuby/MacRuby/blob/master/test-mri/test/ruby/test_transcode.rb से त्रुटि संदेश और test_transcode.rb पर बेसिंग मुझे आपके दोनों त्रुटि संदेशों से गुजरने वाला एन्कोडिंग मिला। String#encode की मदद से यह परीक्षण करना आसान है:

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

आपका मुद्दा सख्ती से फ़ाइल से संबंधित और रूबी के लिए नहीं की तरह दिखता है।

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

अन्य तरीके से Iconv*//IGNORE विकल्प का उपयोग करने के लिए है:

मामले में हम कौन सी एन्कोडिंग का उपयोग करने के लिए और कुछ चरित्र हम String#encode के लिए :invalid और :undef पैरामीटर का उपयोग कर सकते ढीला करने के लिए सहमत कर सकते हैं, इस मामले में निश्चित नहीं हैं,

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

CharlockHolmes का एक स्रोत एन्कोडिंग सुझाव बहुत जाना जाना चाहिए के रूप में: लक्ष्य एन्कोडिंग के लिए आयुध डिपो।

पीएस। String.encode रूबी 1.9 में पेश किया गया था। रूबी 1.8 के साथ आप Iconv

+0

जवाब देने के लिए धन्यवाद। मुझे यकीन है कि समस्या मेरी फाइल से संबंधित है। हालांकि मुझे अभी भी इसे पार्स करने में सक्षम होना चाहिए। मैं कुछ पात्रों को खोने के साथ ठीक हूँ। कोई उपाय? – Vighnesh

+0

@ विघनेश इस अद्यतन को और अधिक समझ में आता है? – chrmod

+0

ओह अच्छा! यह वास्तव में उपयोगी लग रहा है। मैं इसे एक शॉट दूंगा। तुम्हारे प्रयत्नों की प्रशंसा करता हूं! – Vighnesh

संबंधित मुद्दे