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参照)
というようなことがあって、どうも上の様な書き方も正しいとは思えないのです。
cpanのJSON::AnyやJSON::Syckに関する説明をちゃんと読みきれていないせいで、不確かなことが多いまま前回のエントリを書いてしまいました。すみません。