たまに使うのでメモ
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();
}
{
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();
}