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を使ったほうがいいかも。