Jcode::CP932での正規化処理

Jcode::CP932での正規化処理

 Encodeのどこかのバージョンから*1、変換に失敗したときに呼び出す関数を指定できるようになった記憶がある。ということは、そこで呼び出す関数を用意して、

$FALLBACK = \&FB_NORMALIZE_CP932;

sub FB_NORMALIZE_CP932 {
    ...
}

――とかしておけばいいはず*2

 EncodeのFallBack関数の書き方はあとで調べよう……。

 あとは

sub normalize_cp932 {
    my $str_ref = ref $_[0]? $_[0]: \$_[0];
    $$str_ref =~ tr/$utf8_jis/$utf8_cp932/;
    return $$str_ref;
}

――みたいな正規化関数を作るといいのかな。

*1:2.12でした。Perl5.8.8以降かな。ActivePerlはbuild816以降みたいです。

*2:ついでにFB_NORMALIZE_JISとか作るといいか。