The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

名前

Catalyst::Plugin::Charsets::Japanese - 日本語特有の文字コード操作プラグイン

概要

    use Catalyst 'Charsets::Japanese';

    # 使用する文字コードを設定

    MyApp->config->{charsets} = 'UTF-8';

    # もしくは、内部で使いたい文字コードと
    # 出力データに使いたい文字コードを別々に設定

    MyApp->config->{charsets} = {
        in  => 'EUC-JP',
        out => 'Shift_JIS',
    };

説明

近年の日本語環境下でのWEB開発において、サーバーサイドで扱う文字コードとして、 EUC-JP, Shift_JIS, UTF-8 が考えられます。 このモジュールを使うと、選択された文字コードによって適切に、 入出力データのコンバート、Content-Typeのセットを自動で処理します。

仕様する文字コードがUTF-8だけの場合は、Catalyst::Plugin::Unicode, サーバーサイドがUTF-8、出力が他の文字コードの場合は、 Catalyst::Plugin::Unicode::Encoding をそれぞれ使用するといいでしょう。

サーバーサイドの文字コードがEUCなどの場合に、このモジュールを使用してください。

設定

次のように config の charsets に 使用したい文字コードを入れます。

    MyApp->config->{charsets} = 'UTF-8';

また、一つのアプリケーションで二つの文字コードを使いたい場合もあると思います。

例えば、サーバーのロケールや、DBは、EUCで使う設定になっているが、 出力するレスポンスのHTMLはUTF-8にしたい等。

このモジュールでは、リクエストをパースした後のプログラム中で使用したい文字コード、 出力時のレスポンスの文字コードをそれぞれ設定できます。 設定された文字コードによって適切な処理を自動で行います。

上記のように二つの文字コードを使用したい場合は次のようにします。

    MyApp->config->{charsets} = {
        in  => 'EUC-JP',
        out => 'Shift_JIS',
    };

このように書くと、出力は Shift_JIS で行います。

また、リクエストを受けたときは、リクエストのパラメータを Shift_JIS から EUC-JP にコンバートします。

charsets アクセサ

コンテキストに charsets アクセサが実装されます。

charsetsアクセサで呼び出せるオブジェクトには、さらに in と out という、それぞれ 内部文字コードオブジェクト、出力文字コードオブジェクトへのアクセサが実装されます。

次のようにすると、使用している文字コードの名前、省略名、Jcode使用時のコンバート用メソッド名を取得できます。

    sub default : Private {
        my( $self, $c ) = @_;

        # 内部処理用の文字コード名( UTF-8, EUC-JP, Shift_JIS )

        my $inner_charset = $c->charsets->in->name;

        # 内部処理用の文字コード省略名( utf8, euc, sjis )

        my $inner_abbrev = $c->charsets->in->abbreviation;

        # 内部処理用の文字コードのJcodeにおけるコンバート用メソッド名( utf8, euc, sjis )

        my $inner_method = $c->charsets->in->method;

        # 同様に、出力用文字コードについて知りたいときも、
        # name ,abbreviation, method を使用できます。

        my $outer_charset = $c->charsets->out->name;
    }

参考

Jcode

Catalyst

著者

Lyo Kato <lyo.kato@gmail.com>