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
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ハッシュが適していると思います:)しばらく前
同様の問題が発生しました。

于 2009-12-12T11:21:24.110 に答える