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