2017-02-16 11 views
5

मैं रेल 5 का उपयोग कर रहा रूबी 4.2 के साथ उपयोग करते हुए और एक दस्तावेज है कि मैं Nokogiri के साथ पार्स, पाठ के साथ एक लिंक के लिए एक केस संवेदी तरह से देख स्कैनिंग पाठ के साथ लिंक की तलाश में:"अवैध बाइट क्रम" से बचने के लिए कैसे जब Nokogiri

a_elt = doc ? doc.xpath('//a').detect { |node| /link[[:space:]]+text/i === node.text } : nil 

content में मेरे वेब पेज के HTML मिलने के बाद, मैं का उपयोग कर एक Nokogiri डॉक में पार्स:

doc = Nokogiri::HTML(content) 

समस्या है, मैं हो रही है

ArgumentError invalid byte sequence in UTF-8 
कुछ वेब पन्नों पर

जब ऊपर नियमित अभिव्यक्ति का उपयोग कर।

2.4.0 :002 > doc.encoding 
=> "UTF-8" 
2.4.0 :003 > doc.xpath('//a').detect { |node| /individual[[:space:]]+results/i === node.text } 
ArgumentError: invalid byte sequence in UTF-8 
    from (irb):3:in `===' 
    from (irb):3:in `block in irb_binding' 
    from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:187:in `block in each' 
    from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `upto' 
    from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `each' 
    from (irb):3:in `detect' 
    from (irb):3 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

वहाँ एक रास्ता मैं ऊपर एन्कोडिंग या अजीब पात्रों के लिए स्वचालित रूप से खाते में और बाहर फ्लिप नहीं पुनर्लेखन कर सकते हैं?

+0

कृपया पढ़ें "[mcve]"। कोड के साथ किसी समस्या के बारे में पूछते समय हमें न्यूनतम कोड और न्यूनतम इनपुट डेटा देखने की आवश्यकता होती है जो समस्या का प्रदर्शन करती है। कोड की आपकी पहली पंक्ति संदिग्ध है और इसका तात्पर्य है कि इससे पहले कोड स्पष्ट रूप से लिखा नहीं गया है, लेकिन, ज़ाहिर है, इसे देखे बिना हम आपकी मदद नहीं कर सकते हैं। इंटरनेट में Wilds इसकी बहुत पृष्ठों सही तरीके से या सफाई से उत्पन्न नहीं कर रहे थे लगता है, अक्सर अक्षर हैं जो ISO-8859-1 या विन-1252 पात्रों में जिसके परिणामस्वरूप Windows मशीनों पर कीपैड का उपयोग कर दर्ज किए गए थे युक्त पाठ में इंजेक्ट किया जा रहा है आम। उनको पार्सिंग से पहले कनवर्ट करें। –

उत्तर

4

आपका प्रश्न पहले से ही से पहले उत्तर दिया गया है हो सकता है। क्या आपने "Is there any way to clean a file of "invalid byte sequence in UTF-8" errors in Ruby?" से विधियों का प्रयास किया है?

विशेष रूप detect ब्लॉक से पहले, नई लाइन को छोड़कर अवैध बाइट्स और नियंत्रण वर्ण दूर करने की कोशिश:

doc.scrub!("") 
doc.gsub!(/[[:cntrl:]&&[^\n\r]]/,"") 

याद रखें, scrub! एक Ruby 2.1+ method है।

+1

स्क्रबिंग पहली पसंद नहीं है। इसके बजाए, वर्ण आमतौर पर आईएसओ -885 9 -1 या विन -1252 वर्ण होते हैं और उन्हें यूटीएफ -8 में परिवर्तित करने से उन्हें संरक्षित किया जाएगा; स्ट्रिंग का ['एन्कोड'] (http://ruby-doc.org/core-2.4.0/String.html#method-i-encode) विधि एक प्रारंभिक बिंदु है। Http://stackoverflow.com/a/17023810/128421 देखें –

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