[C#] 全形半形轉換
想要實現全形半形的轉換,有個做法很便利 就是使用 Microsoft.VisualBasic 組件,來實現
用法很簡易,先在專案加入參考
然後加入 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);
}
上述的輸出結果:
測試檔案 下載
參考資料: