振り仮名をカタカナでふらせるな
という指摘をいただいて、その通りだと思います(追記:と、思ったんですが、やっぱりカタカナにしないと駄目なこともありそうです)
以下、ひらがな・カタカナ関係のメモ。
- EUCなら頭の1バイト目がA4になるのがひらがな、A5になるのがカタカナ。
- UTF-16だと、ひらがなの範囲は\u3041-\u3093、カタカナは\u30A1-\u30F6。
- カタカナが3つが多いのは「ヴ」「ヵ」「ヶ」。
- カタカナ→ひらがなの変換では「ヴ」「ヵ」「ヶ」や音引き「ー」の扱いに注意する。
ひらがな・カタカナにマッチする正規表現。必要に応じて「ゞ」や「ー」を追加する。
Perlで変換。ひらがなかどうかチェック済みならこんな感じで変換できる。EUC。
#! /usr/bin/perl my $str = "あいうえおがぎぐげごぱぴぷぺぽまみむめもやゆよゃゅょわをん"; my $ret = ""; for (my $i = 0; $i < length($str); $i+=2) { my @c = unpack("x$i cc", $str); # 2バイトずつコードを取得 $ret .= pack("cc", $c[0]+1, $c[1]); # 先頭バイトに1を足して、文字に戻す。 } print $ret;
PHPで変換。以前はそれ専用の関数があった気がします。えーと、これ。いまはどうなってるんでしょうね。
Javaで検出。ここらへんを応用するのがスマートな感じ。これも「ゞ」「ー」等のチェックが必要。
Javaで変換。差分を足せばいいかなー。引くときは「ヴ」に注意。
char a = 'あ'; System.out.println(a); // あ a += 96; System.out.println(a); // ア
- tr/ぁ-ん/ァ-ン/とする方法はなかったか。
XSLTでの変換。
- translate($str, 'ぁあぃいぅうぇえぉおかきく...', 'ァアィイゥウェエォオカキク...')
あるいは可能なら拡張機能を使うといいかも。Xalanでのやり方は、これ。
変換せずに済むなら、それがベスト。