如何设置机械化页面编码?

时间:2009-12-12 03:31:44

标签: ruby encoding mechanize

我正在尝试点击链接获取带有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

4 个答案:

答案 0 :(得分:10)

嘿,你可以做一个:

agent.page.encoding = 'utf-8'

希望它有所帮助!

答案 1 :(得分:4)

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

agent = Mechanize.new

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

page.encoding = 'windows-1251'

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

我对确切的语法不太确定,但我认为CODE_DICT哈希可能是个好看的地方:) 我有一段时间similar problem