2009-12-12 10 views
5

मैं एक लिंक पर एक ISO-8859-1 एन्कोडिंग क्लिक के साथ एक पृष्ठ पाने के लिए कोशिश कर रहा हूँ, इसलिए कोड इस के समान है: इसलिएमशीनी पेज एन्कोडिंग कैसे सेट करें?

page_result = page.link_with(:text => 'link_text').click 

अब तक मैं एक गलत एन्कोडिंग के साथ परिणाम प्राप्त, मैं जैसे पात्रों देखें:

'T�tulo:' instead of 'Título:' 

मैं कोशिश की है कई दृष्टिकोण, जिनमें शामिल हैं:

  • पहले अनुरोध में एन्कोडिंग उन्होंने कहा की तरह एजेंट का उपयोग:

    @page_search = @agent.get(
        :url => 'http://www.server.com', 
        :headers => { 'Accept-Charset' => 'ISO-8859-1' }) 
    
  • पेज ही

    page_result.encoding = 'ISO-8859-1' 
    

लेकिन मैं कुछ गलत कर किया जाना चाहिए के लिए एन्कोडिंग उन्होंने कहा: एक सरल पुट हमेशा गलत वर्ण दिखा।

क्या आप जानते हैं कि एन्कोडिंग कैसे कहें?

अग्रिम धन्यवाद,

जोड़ा गया: निष्पादन योग्य उदाहरण:

require 'rubygems' 
require 'mechanize' 

WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1" 

@agent = WWW::Mechanize.new 

@page = @agent.get(
    :url => 'http://www.mcu.es/webISBN/tituloSimpleFilter.do?cache=init&layout=busquedaisbn&language=es', 
    :headers => { 'Accept-Charset' => 'utf-8' }) 

puts @page.body 

उत्तर

0

हाँ, मशीनीकरण एन्कोडिंग ही पता लगाने के लिए (एनकेएफ कोर रूबी लाइब्रेरी का उपयोग कर) एन्कोडिंग लगता है की कोशिश करेंगे) और कभी कभी विफल रहता है ।

हो सकता है कि यह मदद कर सकता है:
WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1"

मैं सटीक सिंटैक्स के बारे में भी यकीन नहीं है, लेकिन मुझे लगता CODE_DICT हैश एक अच्छी जगह :)
मैं एक similar problem थोड़ी देर के लिए किया था देखने के लिए हो सकता है वापस।

+0

दुर्भाग्य से यह काम नहीं करता ... – Juan

1

क्षमा करें, यह मेरी गलती थी: मैं जावा पृष्ठभूमि से आया हूं और तारों को आंतरिक रूप से utf-16 में परिवर्तित कर दिया गया है। मैं भूल गया रूबी ऐसा नहीं करता है। मैकेनाइजेशन पृष्ठ को बेकार ढंग से पुनर्प्राप्त कर रहा था, लेकिन मुझे डेटाव के माध्यम से डेटा को परिवर्तित करने की आवश्यकता थी।

मानसिक नोट: रूबी अपने एन्कोडिंग को परिवर्तित किए बिना तारों को स्टोर करता है।

+0

आप भी गहरे लाल रंग का प्रयास कर सकते हैं करना चाहते हैं 1.9 यदि संभव हो तो, वे एक बहुत जोड़ा [यूनिकोड सामान] (http://blog.nuclearsquid.com/writings/ruby-1-9-encodings) –

10

अरे तुम सिर्फ एक कर सकते हैं:

agent.page.encoding = 'utf-8' 

आशा है कि यह मदद करता है!

+0

वास्तविक कोड में 'agent.page.encoding' का उपयोग करना मुश्किल है, लेकिन विचार सही और बहुत उपयोगी है, धन्यवाद! –

+0

मैंने इस समस्या को ठीक करने की कोशिश करने में कई घंटे बिताए जब तक कि मैं आपके उत्तर पर ठोकर नहीं लगाता - धन्यवाद! – CodeBiker

4

पिछले जवाब सही है, लेकिन मेरे कोड में यह थोड़ा अलग दिखता है:

agent = Mechanize.new 

page = agent.get('http://example.com') 

page.encoding = 'windows-1251' 

page.search('p').each do |para| 
    puts para.text 
end 
+0

धन्यवाद! इस टिप ने एएससीआईआई में फॉर्म एन्कोडिंग के संबंध में एक संबंधित मुद्दा तय किया। –

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