トップ «前日 最新 翌日» 編集
RSS feed

ただのにっき


2009-05-11(月) [長年日記]

tDiary: search-yahoo.rbで使うAPIをXMLに戻した

先日、うまく動かなくなったからというしょうもない理由でJSON APIに変えたsearch-yahoo.rbプラグインだが、kouくんに調べてもらったら(ありがとう!)単なるencodingの問題だったということが判明し、先ほど元のXML API版に戻した。jsonライブラリ依存問題は解消。

原因はこんなところらしい(現時点での理解):

  • (Yahoo!のサーバのレスポンスにはcharsetの指定もないので?)open-urlはACSII-8BITな文字列を返している
  • REXML::Documentはその文字列のencodingを素直に信じて(XMLの中身は解釈せずに)インスタンスを生成する*1
  • →中身はUTF-8なので変換エラー

Encoding::default_externalをUTF-8にしているから、外界から読み込むものはすべてUTF-8になってると信じ込んでいたのが×ですなぁ。

けっきょくREXML::Sourceを使って中身を解釈させてから、Documentを生成させたらちゃんと動いたのであった。以後、このあたりは最初に疑うことにしよう。というかruby 1.9で出会う問題のほとんどはコレなんだから、そういう習慣を身につけるべきである。

Tags: tDiary yahoo!

*1 REXMLのバグらしい


トップ «前日 最新 翌日» 編集
RSS feed