手抜きC#(.NET Core)で半角文字を全角に変換する
public static class StringsConvert
{
public static string StrConvToWide(this string chars)
{
var newChars = new char[chars.Length];
int length = 0;
for (int i = 0; i < chars.Length; i++, length++)
{
if (0x0021 <= chars[i] && chars[i] <= 0x007d)
{
newChars[length] = (char)(chars[i] + (0xff00 - 0x20));
}
else if (chars[i] == ' ')
{
newChars[length] = ' ';
}
else if (chars[i] == 0x002D
|| chars[i] == 0x2010
|| chars[i] == 0x2011
|| chars[i] == 0x2013
|| chars[i] == 0x2014
|| chars[i] == 0x2015
|| chars[i] == 0x2212
|| chars[i] == 0xFF70
|| chars[i] == 0xFF0D)
{
newChars[length] = (char)0x30FC;
}
else if (0xFF66 <= chars[i] && chars[i] <= 0xFF9D)
{
if (i < (chars.Length - 1))
{
if (chars[i + 1] == 0xFF9E)
{
if (HalfKanaToWideKana.ContainsKey((chars[i] , (char)0xFF9E)))
{
newChars[length] = HalfKanaToWideKana[(chars[i] , (char)0xFF9E)];
i++;
continue;
}
}
else if (chars[i + 1] == 0xFF9F)
{
if (HalfKanaToWideKana.ContainsKey((chars[i] , (char)0xFF9F)))
{
newChars[length] = HalfKanaToWideKana[(chars[i] , (char)0xFF9F)];
i++;
continue;
}
}
}
if(HalfKanaToWideKana.ContainsKey((chars[i], ' ')))
{
newChars[length] = HalfKanaToWideKana[(chars[i], ' ')];
continue;
}
newChars[length] = chars[i];
}
else if (0xFF61 <= chars[i] && chars[i] <= 0xFF65)
{
if (chars[i] == 0xFF61)
{
newChars[length] = (char) 0x3002;
}
else if (chars[i] == 0xFF62)
{
newChars[length] = (char) 0x300C;
}
else if (chars[i] == 0xFF63)
{
newChars[length] = (char) 0x300D;
}
else if (chars[i] == 0xFF64)
{
newChars[length] = (char) 0x3001;
}
else if (chars[i] == 0xFF65)
{
newChars[length] = (char) 0x30FB;
}
else
{
newChars[length] = chars[i];
}
}
else
{
newChars[length] = chars[i];
}
}
return new string(newChars, 0, length);
}
private static readonly Dictionary<(char, char), char> HalfKanaToWideKana = new Dictionary<(char, char), char>
{
{ ('ア', ' '), 'ア'}
,{ ('イ', ' '), 'イ'}
,{ ('ウ', ' '), 'ウ'}
,{ ('エ', ' '), 'エ'}
,{ ('オ', ' '), 'オ'}
,{ ('ァ', ' '), 'ァ'}
,{ ('ィ', ' '), 'ィ'}
,{ ('ゥ', ' '), 'ゥ'}
,{ ('ェ', ' '), 'ェ'}
,{ ('ォ', ' '), 'ォ'}
,{ ('ウ' , '゙'), 'ヴ'}
,{ ('カ', ' '), 'カ'}
,{ ('キ', ' '), 'キ'}
,{ ('ク', ' '), 'ク'}
,{ ('ケ', ' '), 'ケ'}
,{ ('コ', ' '), 'コ'}
,{ ('カ' , '゙'), 'ガ'}
,{ ('キ' , '゙'), 'ギ'}
,{ ('ク' , '゙'), 'グ'}
,{ ('ケ' , '゙'), 'ゲ'}
,{ ('コ' , '゙'), 'ゴ'}
,{ ('サ', ' '), 'サ'}
,{ ('シ', ' '), 'シ'}
,{ ('ス', ' '), 'ス'}
,{ ('セ', ' '), 'セ'}
,{ ('ソ', ' '), 'ソ'}
,{ ('サ' , '゙'), 'ザ'}
,{ ('シ' , '゙'), 'ジ'}
,{ ('ス' , '゙'), 'ズ'}
,{ ('セ' , '゙'), 'ゼ'}
,{ ('ソ' , '゙'), 'ゾ'}
,{ ('タ', ' '), 'タ'}
,{ ('チ', ' '), 'チ'}
,{ ('ツ', ' '), 'ツ'}
,{ ('テ', ' '), 'テ'}
,{ ('ト', ' '), 'ト'}
,{ ('タ' , '゙'), 'ダ'}
,{ ('チ' , '゙'), 'ヂ'}
,{ ('ツ' , '゙'), 'ヅ'}
,{ ('テ' , '゙'), 'デ'}
,{ ('ト' , '゙'), 'ド'}
,{ ('ナ', ' '), 'ナ'}
,{ ('ニ', ' '), 'ニ'}
,{ ('ヌ', ' '), 'ヌ'}
,{ ('ネ', ' '), 'ネ'}
,{ ('ノ', ' '), 'ノ'}
,{ ('ハ', ' '), 'ハ'}
,{ ('ヒ', ' '), 'ヒ'}
,{ ('フ', ' '), 'フ'}
,{ ('ヘ', ' '), 'ヘ'}
,{ ('ホ', ' '), 'ホ'}
,{ ('ハ' , '゙'), 'バ'}
,{ ('ヒ' , '゙'), 'ビ'}
,{ ('フ' , '゙'), 'ブ'}
,{ ('ヘ' , '゙'), 'ベ'}
,{ ('ホ' , '゙'), 'ボ'}
,{ ('ハ' , '゚'), 'パ'}
,{ ('ヒ' , '゚'), 'ピ'}
,{ ('フ' , '゚'), 'プ'}
,{ ('ヘ' , '゚'), 'ペ'}
,{ ('ホ' , '゚'), 'ポ'}
,{ ('マ', ' '), 'マ'}
,{ ('ミ', ' '), 'ミ'}
,{ ('ム', ' '), 'ム'}
,{ ('メ', ' '), 'メ'}
,{ ('モ', ' '), 'モ'}
,{ ('ヤ', ' '), 'ヤ'}
,{ ('ユ', ' '), 'ユ'}
,{ ('ヨ', ' '), 'ヨ'}
,{ ('ャ', ' '), 'ャ'}
,{ ('ュ', ' '), 'ュ'}
,{ ('ョ', ' '), 'ョ'}
,{ ('ッ', ' '), 'ッ'}
,{ ('ラ', ' '), 'ラ'}
,{ ('リ', ' '), 'リ'}
,{ ('ル', ' '), 'ル'}
,{ ('レ', ' '), 'レ'}
,{ ('ロ', ' '), 'ロ'}
,{ ('ワ', ' '), 'ワ'}
,{ ('ン', ' '), 'ン'}
,{ ('ヲ', ' '), 'ヲ'}
};
}