UTF-8の扱い

MojoliciousでUTF-8を利用する場合の扱い方。

ポイントはみっつ。ひとつは、スクリプトでUTF-8を扱う場合はutf8プラグマを有効にするということ。もちろんファイルはUTF-8で保存します。

use utf8;

(現在のMojoliciousでは、自動的にutf8プラグマが自動的に設定されるため、記述する必要はありません。)

ふたつめは、リクエストがコントローラーにわたってきた時点で、パラメーターなどに含む文字列は内部文字列に変換済みであるということ。ですので注意点としてはたとえばデータベースに登録するときなどは、内部文字列からバイト文字列に変更する必要があるということです。

みっつめは、テンプレートが描画されるときには、内部文字列からバイト文字列に変換されるということです。テンプレート自体は読み込まれた時点でバイト文字列から内部文字列に変換され、出力されるときに内部文字列からバイト文字列に自動的に変換されます。ですからrenderメソッドなどで、パラメータを渡すときは内部文字列に変換した文字列を渡す必要があります。

get '/' => sub {
  my $self = shift;

  # 内部文字列に変換済み
  my $title = $self->param('title');
    
  # データベースに保存するときなどは内部文字列からバイト文字列へ変換

   # データベースから取り出すときなどはバイト文字列から内部文字列へ変換

  # 内部文字列を渡す
  $self->render(title => $title);
}

関連情報