Net::Twitterの文字化けの件

前回書いたエントリ、Net::Twitterで文字化けが起こる場合、JSON周りを疑ってみると幸せになれるかもしれないですが、思ったより単純じゃないかもしれません。


JSON::XSかJSON::PPがインストールされていないと、文字化けが起きますっていうのは確かだと思うのですが、単純じゃないと言うのは、Net::Twitter

JSON::Any->new->jsonToObj($data);


という書き方をしていないから、本来引っかかるはずのcroakエラーに引っかからない、と書いたことです。


検証してみたところnewをかませただけじゃエラーにはならず、エラーが出るようにするためには、

# オプションでutf8というキーをenabledの状態にする
JSON::Any->new(utf8 => 1)->jsonToObj($data);


的な書き方をしなくてはいけません。でも、


・こういう使い方をしているコードを見かけない($ENV{JSON_ANY_ORDER}でutf8=1としているのは見かけた)
・そもそもJSONってunicodeエンコードするのが推奨みたいだけど、わざわざ上記のutf8のオプションを指定しないといけないのか?(wikipedia参照)
JSON::Syckは完全にUTF-8をサポートしていないというわけではなく、デフォルトではサポートしていないということらしい(cpan参照)


というようなことがあって、どうも上の様な書き方も正しいとは思えないのです。


cpanJSON::AnyやJSON::Syckに関する説明をちゃんと読みきれていないせいで、不確かなことが多いまま前回のエントリを書いてしまいました。すみません。