2009-12-12 19 views
5

Sto cercando di ottenere una pagina con un click codifica ISO-8859-1 su un link, in modo che il codice è simile a questo:Come impostare la codifica della pagina meccanize?

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

Finora ho ottenere il risultato con una codifica sbagliata, così vedo personaggi come: diversi approcci

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

che ho provato, tra cui:

  • Affermare la codifica nella prima richiesta utilizzando l'agente come:

    @page_search = @agent.get(
        :url => 'http://www.server.com', 
        :headers => { 'Accept-Charset' => 'ISO-8859-1' }) 
    
  • Affermare la codifica per la pagina stessa

    page_result.encoding = 'ISO-8859-1' 
    

Ma io devo fare qualcosa di sbagliato: un semplice mette mostrano sempre i caratteri sbagliati.

Sai come impostare la codifica?

Grazie in anticipo,

Aggiunto: esempio eseguibile:

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 

risposta

0

Sì, Mechanize cercherà di rilevare la codifica in sé (utilizzando la libreria di base NKF Ruby) di indovinare la codifica) ed a volte non riesce .

Forse questo potrebbe aiutare:
WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1"

io non sono troppo sicuro circa la sintassi esatta, ma penso che il CODE_DICT Hash potrebbe essere un buon posto per cercare :)
ho avuto un similar problem un po ' indietro.

+0

Purtroppo non funziona ... – Juan

1

Siamo spiacenti, è stato un mio errore: vengo da uno sfondo Java e le stringhe sono internamente convertite in utf-16. Ho dimenticato che Ruby non lo fa. Mechanize stava recuperando la pagina in modo impeccabile, ma avevo bisogno di convertire i dati tramite iconv.

Nota mentale: Ruby memorizza le stringhe senza convertire la codifica.

+0

si potrebbe anche voglia di provare Ruby 1.9, se possibile, hanno aggiunto un bel po ' di [unicode stuff] (http://blog.nuclearsquid.com/writings/ruby-1-9-encodings) –

10

Hey si può solo fare un:

agent.page.encoding = 'utf-8' 

Speranza che aiuta!

+0

È difficile usare "agent.page.encoding" nel codice reale, ma l'idea è corretta e molto utile, Grazie! –

+0

Ho passato molte ore a cercare di risolvere questo problema finché non sono incappato nella tua risposta - grazie! – CodeBiker

4

La risposta precedente è corretta, ma nel mio codice sembra leggermente diverso:

agent = Mechanize.new 

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

page.encoding = 'windows-1251' 

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

Grazie! Questo suggerimento ha risolto un problema correlato relativo alla codifica del modulo che era in ASCII. –

Problemi correlati