LoginSignup
2
1

More than 5 years have passed since last update.

C#(.NET Core)で半角文字を全角文字に変換する

Last updated at Posted at 2018-08-18

手抜き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>
        {
            { ('ア', ' '), 'ア'}
            ,{ ('イ', ' '), 'イ'}
            ,{ ('ウ', ' '), 'ウ'}
            ,{ ('エ', ' '), 'エ'}
            ,{ ('オ', ' '), 'オ'}            
            ,{ ('ァ', ' '), 'ァ'}
            ,{ ('ィ', ' '), 'ィ'}
            ,{ ('ゥ', ' '), 'ゥ'}
            ,{ ('ェ', ' '), 'ェ'}
            ,{ ('ォ', ' '), 'ォ'}            
            ,{ ('ウ' , '゙'), 'ヴ'}            
            ,{ ('カ', ' '), 'カ'}
            ,{ ('キ', ' '), 'キ'}
            ,{ ('ク', ' '), 'ク'}
            ,{ ('ケ', ' '), 'ケ'}
            ,{ ('コ', ' '), 'コ'}            
            ,{ ('カ' , '゙'), 'ガ'}
            ,{ ('キ' , '゙'), 'ギ'}
            ,{ ('ク' , '゙'), 'グ'}
            ,{ ('ケ' , '゙'), 'ゲ'}
            ,{ ('コ' , '゙'), 'ゴ'}            
            ,{ ('サ', ' '), 'サ'}
            ,{ ('シ', ' '), 'シ'}
            ,{ ('ス', ' '), 'ス'}
            ,{ ('セ', ' '), 'セ'}
            ,{ ('ソ', ' '), 'ソ'}            
            ,{ ('サ' , '゙'), 'ザ'}
            ,{ ('シ' , '゙'), 'ジ'}
            ,{ ('ス' , '゙'), 'ズ'}
            ,{ ('セ' , '゙'), 'ゼ'}
            ,{ ('ソ' , '゙'), 'ゾ'}            
            ,{ ('タ', ' '), 'タ'}
            ,{ ('チ', ' '), 'チ'}
            ,{ ('ツ', ' '), 'ツ'}
            ,{ ('テ', ' '), 'テ'}
            ,{ ('ト', ' '), 'ト'}            
            ,{ ('タ' , '゙'), 'ダ'}
            ,{ ('チ' , '゙'), 'ヂ'}
            ,{ ('ツ' , '゙'), 'ヅ'}
            ,{ ('テ' , '゙'), 'デ'}
            ,{ ('ト' , '゙'), 'ド'}            
            ,{ ('ナ', ' '), 'ナ'}
            ,{ ('ニ', ' '), 'ニ'}
            ,{ ('ヌ', ' '), 'ヌ'}
            ,{ ('ネ', ' '), 'ネ'}
            ,{ ('ノ', ' '), 'ノ'}            
            ,{ ('ハ', ' '), 'ハ'}
            ,{ ('ヒ', ' '), 'ヒ'}
            ,{ ('フ', ' '), 'フ'}
            ,{ ('ヘ', ' '), 'ヘ'}
            ,{ ('ホ', ' '), 'ホ'}            
            ,{ ('ハ' , '゙'), 'バ'}
            ,{ ('ヒ' , '゙'), 'ビ'}
            ,{ ('フ' , '゙'), 'ブ'}
            ,{ ('ヘ' , '゙'), 'ベ'}
            ,{ ('ホ' , '゙'), 'ボ'}            
            ,{ ('ハ' , '゚'), 'パ'}
            ,{ ('ヒ' , '゚'), 'ピ'}
            ,{ ('フ' , '゚'), 'プ'}
            ,{ ('ヘ' , '゚'), 'ペ'}
            ,{ ('ホ' , '゚'), 'ポ'}            
            ,{ ('マ', ' '), 'マ'}
            ,{ ('ミ', ' '), 'ミ'}
            ,{ ('ム', ' '), 'ム'}
            ,{ ('メ', ' '), 'メ'}
            ,{ ('モ', ' '), 'モ'}            
            ,{ ('ヤ', ' '), 'ヤ'}
            ,{ ('ユ', ' '), 'ユ'}
            ,{ ('ヨ', ' '), 'ヨ'}            
            ,{ ('ャ', ' '), 'ャ'}
            ,{ ('ュ', ' '), 'ュ'}
            ,{ ('ョ', ' '), 'ョ'}            
            ,{ ('ッ', ' '), 'ッ'}                        
            ,{ ('ラ', ' '), 'ラ'}
            ,{ ('リ', ' '), 'リ'}
            ,{ ('ル', ' '), 'ル'}
            ,{ ('レ', ' '), 'レ'}
            ,{ ('ロ', ' '), 'ロ'}                        
            ,{ ('ワ', ' '), 'ワ'}
            ,{ ('ン', ' '), 'ン'}
            ,{ ('ヲ', ' '), 'ヲ'}            
        };
    }
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1