C# で StrConvなどの API を使わずに、平仮名と片仮名を変換する方法を書いていきます。
目次
- 片仮名→平仮名
- 平仮名→片仮名
- 片仮名の範囲
- 平仮名の範囲
- 変換ロジック
- 注意事項
1. 片仮名→平仮名
カタカナをひらがなに変換するメソッドは以下の通りです。
// 引数に含まれるカタカナを全てひらがなに変換 public static string KataToHira(string s) { StringBuilder sb = new StringBuilder(); char[] target = s.ToCharArray(); char c; for (int i = 0; i < target.Length; i++) { c = target[i]; if (c >= 'ァ' && c <= 'ヴ') { // カタカナの範囲 c = (char)(c - 0x0060); // 片仮名→平仮名 } sb.Append(c); } return sb.ToString(); }
2. 平仮名→片仮名
ひらがなをカタカナに変換するメソッドは以下の通りです。
// 引数に含まれるひらがなを全てカタカナに変換 public static string HiraToKata(string s) { StringBuilder sb = new StringBuilder(); char[] target = s.ToCharArray(); char c; for (int i = 0; i < target.Length; i++) { c = target[i]; if (c >= 'ぁ' && c <= 'ゔ') { // ひらがなの範囲 c = (char)(c + 0x0060); // 平仮名→片仮名 } sb.Append(c); } return sb.ToString(); }
3. 片仮名の範囲
今回のカタカナの範囲指定は以下の通りです。
- ァ(U+30A1)から
- ヴ(U+30F4)まで
下の Unicode表のオレンジ枠部分が該当します。
4. 平仮名の範囲
ひらがなの範囲指定は以下の通りです。
- ぁ(U+3041)から
- ゔ(U+3094)まで
下の Unicode表のオレンジ枠部分が該当します。
5. 変換ロジック
片仮名→平仮名の場合は、変換対象のユニコードから U+0060(0x0060)を引きます。「ァ」を変換する場合は以下の通りです。
ァ(0x30A1)- 0x0060 = ぁ(0x3041)
平仮名→片仮名は、逆に U+0060(0x0060)を足します。「ぁ」を変換する場合は以下の通りです。
ぁ(0x3041)+ 0x0060 = ァ(0x30A1)
6. 注意事項
上の例は、以下の点に注意が必要です。
- 「ヵ」「ヶ」「ゕ」「ゖ」は変換対象外
- 「ヰ」「ヱ」「ゐ」「ゑ」は変換対象
変換対象の文字範囲は、必要に応じて変更して頂ければと思います。