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::TwitterJSON::Any->newをせずに、JSON::Any->jsonToObjeを直接呼び出しています。

Net::Twitterで文字化けが起こる!という方は、JSON::XSやJSON::PPをインストールすると幸せになれるかもしれません;-)

P.S. Net::TwitterのAutorにnewしてから使うように言ったほうがいいのかなー。