« バイト数指定で文字列を切り出す | メイン | パープルタン »

半角カナを全角に変換

たまに使うのでメモ

private string ChangeWideKana(string val)
{
  string sHalfChars  = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッ、。ー「」゙゚";
  string sFullChars  = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ"
                     + "マミムメモヤユヨラリルレロワヲンァィゥェォャュョッ、。ー「」゛゜";
  string sFullCharsB = "  ヴ  ガギグゲゴザジズゼゾダヂヅデド     バビブベボ"
                     + "                                ";
  string sFullCharsP = "                         パピプペポ"
                     + "                                ";
  
  if (val == null) return null;
  if (val.Length == 0) return "";

  StringBuilder result = new StringBuilder();

  int idx = 0;
  while (idx < val.Length)
  {
    char cCur = val[idx];
    int idxCurChar = sHalfChars.IndexOf(cCur);
    if (idxCurChar > -1)
    {
      int char_type = 0; //0:通常 1:濁音 2:半濁音

      //濁音、半濁音のチェック
      if (idx < (val.Length-1))
      {
        if ((val[idx+1] == '゙') && (sFullCharsB[idxCurChar] != ' '))
        {
          char_type = 1;
        }
        else if ((val[idx+1] == '゚') && (sFullCharsP[idxCurChar] != ' '))
        {
          char_type = 2;
        }
      }
      
      //マッピングにより半角→全角変換
      switch (char_type)
      {
        case 0: //普通のカタカナ
          result.Append(sFullChars[idxCurChar]);
          break;
        case 1: //濁音
          result.Append(sFullCharsB[idxCurChar]);
          idx++;
          break;
        case 2: //半濁音
          result.Append(sFullCharsP[idxCurChar]);
          idx++;
          break;                      
      }
    
    }
    idx++;
  }
  return result.ToString();
}

トラックバック

このエントリーのトラックバックURL:
http://matsystem.net/mt/mt-tb.cgi/129

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年02月15日 17:56に投稿されたエントリーのページです。

ひとつ前の投稿は「バイト数指定で文字列を切り出す」です。

次の投稿は「パープルタン」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。