MojoliciousでJSON-APIを作るのは普通に行うと思いますが、
JSON文字列をHTML内に出力するというケースもあるでしょう。
そんな時に、文字化けに遭遇したのでご紹介します。
下記サンプルコードを見てください。
package MojibakeApp::Example;
use Mojo::Base 'Mojolicious::Controller';
use Encode 'decode';
# This action will render a template
sub welcome {
my $self = shift;
my $moji = {hello => "文字化け"};
my $json = $self->render(
json => $moji , partial => 1);
$self->app->log->debug($json);
print Dumper($json);
$self->render(
message => $json);
% layout 'default';
% title 'Welcome';
<script>var hoge= <%= $message %>
</script>
この文字化けに遭遇したときは、原因が最初よくわかりませんでしたが、
ログ出力でその原因がわかりました。
Mojoliciousのログファイルは文字化けしていたのですが、
ターミナルに出力したprintの出力結果が文字化けしていなかったのです。
そうです。render(partial)した結果がバイト列になっているのです。
下記のようにdecodeで一旦、テキスト文字列に引き戻してやることで
文字化けを回避することができました。
my $json = $self->render(
json => $moji , partial => 1)->decode;
小ネタではありますが、筆をおきます。
書いていてこれはMojoliciousのバグなのでは?!
とも思うようになってきて若干不安です。
さて、次回はazumakuniyukiさんということで、期待高まります。
よろしくお願いします。