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'
    

但我一定是做错了什么:一个简单的 put 总是显示错误的字符。

你知道如何说明编码吗?

提前致谢,

补充:可执行示例:

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
4

4 回答 4

10

嘿,你可以做一个:

agent.page.encoding = 'utf-8'

希望能帮助到你!

于 2011-11-25T11:26:01.827 回答
4

前面的答案是正确的,但在我的代码中看起来略有不同:

agent = Mechanize.new

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

page.encoding = 'windows-1251'

page.search('p').each do |para|
  puts para.text
end
于 2012-04-25T10:39:45.047 回答
1

抱歉,这是我的错误:我来自 Java 背景,并且字符串在内部转换为 utf-16。我忘了Ruby不这样做。Mechanize 完美地恢复了页面,但我需要通过 iconv 转换数据。

心理提示:Ruby 存储字符串而不转换其编码。

于 2009-12-14T03:07:02.990 回答
0

是的,Mechanize 会尝试检测编码本身(使用 NKF 核心 Ruby 库)来猜测编码)并且有时会失败。

也许这可能会有所帮助:
WWW::Mechanize::Util::CODE_DIC[:SJIS] = "ISO-8859-1"

我不太确定确切的语法,但我认为 CODE_DICT Hash 可能是一个很好的查看位置:) 前段时间
我遇到了类似的问题

于 2009-12-12T11:21:24.110 回答