2009-12-12 5 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

Да, Mechanize попытается определить саму кодировку (с использованием ядра НКФ Ruby, библиотека) угадать кодировку), а иногда терпит неудачу ,

Может быть, это может помочь:
WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1"

Я не слишком уверен, что точный синтаксис, но я думаю, что CODE_DICT Hash может быть хорошим местом, чтобы посмотреть :)
я был similar problem некоторое время назад.

+0

К сожалению, это не работает ... – Juan

1

Извините, это была моя ошибка: я исхожу из фона Java, и там строки внутренне преобразованы в utf-16. Я забыл, что Ruby этого не делает. Механизм восстанавливал страницу безупречно, но мне нужно было преобразовать данные через значок.

Умственное примечание: Ruby хранит строки без преобразования его кодировки.

+0

вы также хотите попробовать рубин 1,9, если это возможно, они добавили кучу из [unicode stuff] (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

Спасибо! Этот совет зафиксировал связанную с этим проблему в отношении кодировки формы, которая была в ASCII. –

Смежные вопросы