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