Net::Twitterで文字化けが起こる場合、JSON周りを疑ってみると幸せになれるかもしれない
[追記:2008/07/02]
このエントリは不確かなことが多いまま書いてしまいました。
あとに書いたエントリがありますので、このエントリを読んだ方は、こちらも読むようにしてください。
Net::Twitterの文字化けで困って、このページにたどり着いた方は、とりあえずシステムにJSON::XSかJSON::PPがインストールされているか確認して、されていなければインストールしてみてください。おそらく文字化けが解消されます:-)
JSONのdecodeにJSON::SyckやJSON::DWIWを使っている環境だと、Net::Twitterで文字化けが起こるようです。
これは、JSON::SyckやJSON::DWIWがutf8をサポートしていないために起こります。
本来なら、JSON::SyckやJSON::DWIWしかインストールされていない環境でutf8を扱おうとしたら、JSONモジュール群のラッパーであるJSON::Anyが
croak "JSON::Syck does not support utf8" croak "JSON::DWIW does not support utf8"
と警告を出して終了します。しかしこの警告の機構が働くのは、
my $json = JSON::Any->new $json->jsonToObj($hoge);
のように使っている場合のみで、
JSON::Any->jsonToObj()という風にdecodeの処理をクラスメソッドとして呼び出した場合、警告処理の機構が働きません。Net::TwitterはJSON::Any->newをせずに、JSON::Any->jsonToObjeを直接呼び出しています。
Net::Twitterで文字化けが起こる!という方は、JSON::XSやJSON::PPをインストールすると幸せになれるかもしれません;-)
P.S. Net::TwitterのAutorにnewしてから使うように言ったほうがいいのかなー。