4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MojoliciousAdvent Calendar 2013

Day 5

MojoliciousのJSON出力で文字化け

Last updated at Posted at 2013-12-04

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さんということで、期待高まります。
よろしくお願いします。

4
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?