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

呀,機械化將嘗試檢測編碼本身(使用NKF核心Ruby庫)猜測編碼),有時失敗。

也許這可能幫助:
WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1"

我也不太確定確切的語法,但我認爲CODE_DICT哈希可能是看:)
我有一個similar problem一段時間的好地方背部。

+0

遺憾的是它不工作... – Juan 2009-12-14 00:57:02

1

對不起,這是我的錯誤:我來自Java背景,並且字符串內部轉換爲utf-16。我忘了Ruby不這樣做。 Mechanize正在完美地恢復頁面,但我需要通過iconv轉換數據。

心理記錄:Ruby存儲字符串而不轉換其編碼。

+0

你可能也想嘗試紅寶石1.9如果可能的話,他們增加了一大堆[unicode stuff](http://blog.nuclearsquid.com/writings/ruby-1-9-encodings) – 2009-12-15 08:36:30

10

嘿,你可以做一個:

agent.page.encoding = 'utf-8' 

希望它能幫助!

+0

很難在實際代碼中使用'agent.page.encoding',但想法是正確的並且非常有幫助,謝謝! – 2012-04-25 10:40:55

+0

我花了很多時間試圖解決這個問題,直到我偶然發現你的答案 - 謝謝你! – CodeBiker 2013-07-09 21:01:10

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格式編碼相關的問題。 – 2013-04-16 18:24:30