[C#] 全形半形轉換

  • 28778
  • 0
  • 2013-07-23

[C#] 全形半形轉換

想要實現全形半形的轉換,有個做法很便利 就是使用 Microsoft.VisualBasic 組件,來實現

用法很簡易,先在專案加入參考

image

image

然後加入 using Microsoft.VisualBasic;


            string strNarrow = "abc1234567890,.;";
            string strGB = "今天天气真好";
            string strBig5 = "今天天氣真好";

            //第一個字母轉換為大寫。
            Console.WriteLine("首字母轉大寫:" + Strings.StrConv(strNarrow, VbStrConv.ProperCase, 0));

            //半形字元轉換成全形字元。
            Console.WriteLine("半形轉全形:" + Strings.StrConv(strNarrow, VbStrConv.Wide, 0));

            //全形字元轉換成半形字元。
            Console.WriteLine("全形轉半形:" + Strings.StrConv(strWide, VbStrConv.Narrow, 0));

            //繁體中文轉換成簡體中文。
            Console.WriteLine("繁體轉簡體:" + Strings.StrConv(strBig5, VbStrConv.SimplifiedChinese, 2052));

            //簡體中文轉換成繁體中文。
            Console.WriteLine("簡體轉繁體:" + Strings.StrConv(strGB, VbStrConv.TraditionalChinese, 1028));

就可以進行轉換了,還可以繁簡轉換等等…

如果不用 Microsoft.VisualBasic 組件,就是自己來進行轉換了

其概念大都是先將要轉換的字串 (string) 轉為 char 或 byte,然後再根據全半形的差異替換

-------------------------------------------------------------

補充一下:Microsoft.VisualBasic 組件對於難字字形轉換會出現 ? ,例如:犇

 


        ///字串轉全形
        ///</summary>
        ///<param name="input">任一字元串</param>
        ///<returns>全形字元串</returns>
        private static string ToWide(string input)
        {
            //半形轉全形:
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                //全形空格為12288,半形空格為32
                if (c[i] == 32)
                {
                    c[i] = (char)12288;
                    continue;
                }
                //其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
                if (c[i] < 127)
                    c[i] = (char)(c[i] + 65248);
            }
            return new string(c);
        }

        ///<summary>
        ///字串轉半形
        ///</summary>
        ///<paramname="input">任一字元串</param>
        ///<returns>半形字元串</returns>
        private static string ToNarrow(string input)
        {
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] == 12288)
                {
                    c[i] = (char)32;
                    continue;
                }
                if (c[i] > 65280 && c[i] < 65375)
                    c[i] = (char)(c[i] - 65248);
            }
            return new string(c);
        }

 

 

上述的輸出結果:

image

 

測試檔案 下載

 

參考資料:

MSDN_Strings.StrConv 方法

MSDN_在十六進位字串和數字型別間轉換

wiki_全形和半形

強力鎯頭 VB BLOG

Will 保哥_使用 C# 實做全形轉半形的方法

In 91_文字以全形或半形呈現