PerlのWeb Application FrameworkであるMojoliciousは、既定のエンコーディングがUTF-8です。
ただ、諸事情によりどうしてもWindowsのShift-JISを扱わないといけないときもあります(外部Web APIがShift-JIS前提とか……)。そんな時に、どうやってやればよいかという話です。
やること
-
before_dispatch
フックでリクエストの文字コードを'cp932'にする -
before_render
フックで-
html
、json
、txt
それぞれのフォーマットのキャラセットに'Shift-JIS'を指定する - 描画する際の文字コードを'cp932'にする
-
コード
#!/usr/bin/perl
use Mojolicious::Lite;
hook before_dispatch => sub {
my $c = shift;
# リクエストの既定の文字コードを指定
$c->req->default_charset('cp932');
};
hook before_render => sub {
# 必要に応じて、各フォーマット毎にcharsetを指定する
app->types->type(html => "text/html; charset=Shift-JIS");
app->types->type(json => "application/json; charset=Shift-JIS");
app->types->type(txt => "text/plain; charset=Shift-JIS");
# 描画する際の文字コードを指定
app->renderer->encoding('cp932');
};
post '/' => sub {
...
};
謝辞
Twitterで困ったと呟いたらアドバイスいただいた@hayajoさんに感謝!