RubyShift_JISで書かれたHTML、例えば下記のような文書をスクレイピングする場合。</body></html>Content-Typeは下記のように返されるとする。div.textendといった簡単なスクリプトでスクレイピングでき、1.ほげ2.ふが3.ぴよといった結果を得ることができる。"\x87\x42"など)といったShift_JISには存在しない文字。「CP932」とか「Windows-31J」とか呼ばれるようなものたち。0x82とエラーになってしまったりする。原因この例の場合、得られたコンテンツは実際には"Shift_JIS"ではなく"CP932"として処理する必要がある。HTTPのレスポンスヘッダやmetaタグからでは"CP932"か"Shift_JIS"かを判別する術がないので、内部でUTF-8に変換しようとする場合は"Shift_JIS"として処理をするしかなくなっているから、だと思われる。解決策CP932が含まれてくると分かっているのであれば、明示的に指定して準備しておくことで問題は回避できそう。(Ruby)Nokogiriを使う場合、Nokogiri::HTML::Document.parseにencodingを第3引数で渡すことができる。div.textendのように明示的に指定することで正しく変換された結果を得ることができる。'CP932');のようにcharsetを指定してdecoded_contentを呼ぶことで正しく変換された文書を得ることができるのだけど、Web::Scraperでは、内部で呼ばれるdecoded_contentにオプションを渡すような仕組みはないので、Encode::Aliasを使って回避するのが良さそう。encode_utf8($div->{text});}このように書くことで、内部ではShift_JISとして扱って変換しようとするのだけどaliasの効果によってCP932として変換するように動いてくれる。subtechMechanizeでもハマることありそう。ZooKeeperのことではありません。