Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

C# ひらがなとカタカナを変換する方法(StrConv未使用)

C# で StrConvなどの API を使わずに、平仮名と片仮名を変換する方法を書いていきます。

目次

  1. 片仮名→平仮名
  2. 平仮名→片仮名
  3. 片仮名の範囲
  4. 平仮名の範囲
  5. 変換ロジック
  6. 注意事項

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. 注意事項

上の例は、以下の点に注意が必要です。

  • 「ヵ」「ヶ」「ゕ」「ゖ」は変換対象外
  • 「ヰ」「ヱ」「ゐ」「ゑ」は変換対象

変換対象の文字範囲は、必要に応じて変更して頂ければと思います。