Tengから取得した日本語文字列をMojoliciousでrender(partial)したあと、renderすると文字化けする
うーん。やっぱり文字化けしてしまった。
- Tengから日本語文字列を取得する。
- それをjsonデータとして、render(partial=>1)
- それをスタッシュにつめる
- renderでスタッシュの内容を出力
my $json = $self->render(json=> \@routes, partial => 1); $self->app->log->debug($json); #文字化けする print Dumper($json); #文字化けしない $self->stash(route_json => $json); $self->render('search/index'); #文字化けする
デバッグ用に埋め込んだprint Dumperの方は文字化けしない。ログファイルに 出力した方および、$self->renderは文字化けする。
partial経由しないで、いきなり、renderでも文字化けしない。うーん。なぞは深まるばかり。。。
$self->render(json=> \@routes); #文字化けしない
perlの文字化けについて、自分で調べられるように、詳しくならないとだめだなぁ。 がくり。。
解決しました - 追記(2013/6/14)
render(partial)した結果は、いわゆるバイト文字列の世界になるので decodeしてあげて内部文字列に戻す必要があるのですね。 内部文字列に戻したあとに、スタッシュにセットしてあげればいいということですね。
use Encode 'decode'; ... my $json = $self->render(json=> \@routes, partial => 1)->decode;
ふむふむ。render(partial)したときに、日本語が含まれる場合には、要注意ということでした。