2006-11-03

Encode::JP::Z2Hってeucで処理してたのね。

 何故なんでしょ。

 というわけで、Jcode::CP932用にUTF-8な変換テーブルを作った。Encodeのほうも差し替えて欲しいけど、依存してるモジュールの都合で難しいんだろうなぁ。。

 ちなみに

          "\x{ff9c}\x{ff9e}" => "\x{30f7}",	#ワ゛
          "\x{ff66}\x{ff9e}" => "\x{30fa}",	#ヲ゛

という文字もあったので、追加しようかと考えたんだけど、当然のように文字化けするんだよね……。ううむ。

 いちおう追加しておいて、normalize処理で分解するような処理を追加しとくべきか?

 ついでに、Jcode::CP932ではhira2kata/kata2hiraと、ascii_z2h/ascii_h2zも追加。こんなの:

sub hira2kata {
    my $str_ref = $_[0]->{r_str};
    $$str_ref =~ tr [\x{3041}-\x{3096}]
                    [\x{30a1}-\x{30f6}] ;
    $_[0];
}
sub kata2hira {
    my $str_ref = $_[0]->{r_str};
    $$str_ref =~ tr [\x{30a1}-\x{30f6}]
                    [\x{3041}-\x{3096}] ;
    $_[0];
}

sub ascii_h2z {
    my $str_ref = $_[0]->{r_str};
    $$str_ref =~ tr [\x{0021}-\x{007e}]
                    [\x{ff01}-\x{ff5e}] ;
    $_[0];
}
sub ascii_z2h {
    my $str_ref = $_[0]->{r_str};
    $$str_ref =~ tr [\x{ff01}-\x{ff5e}]
                    [\x{0021}-\x{007e}] ;
    $_[0];
}

 ひらがなカタカナ変換はJcodeでもそのまま動くけど、asciiの全角半角変換はそのままだと文字化けするんだよね……。

 追記

 これらはJcode::CP932-0.06で実装してます。

 カタカナの全角半角変換はJcode::CP932::H2Zとかにあるのでどーぞ。ちなみにパフォーマンスについては半角→全角についてはEUCのほうが1.5倍くらい速いですが、全角→半角についてはUTF8のままのほうが10倍くらい速いです*1

eval qq{tr///}はやっぱり滅茶苦茶重かった。

 パフォーマンスが気になったのでベンチマークをとったら、通常のtr///に比べて20倍以上遅かった。

 s///xmsgoeとかしたほうが10倍くらい速かったので、eval qq{tr///}するくらいならハッシュに変換テーブルを作ってs///xmsgoeを使ったほうがいいかも。

*1UTF-8だと全角<->半角変換がほぼ同じ速さなので、UTF-8で統一するほうが好み。