一、半角与全角之间的转化
/// <summary>
/// 半角转全角
/// </summary>
/// <param name="BJstr"></param>
/// <returns></returns>
static public string GetQuanJiao(string BJstr)
{
char[] c = BJstr.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
byte[] b = System.Text.Encoding.Unicode.GetBytes(c, i, 1);
if (b.Length == 2)
{
if (b[1] == 0)
{
b[0] = (byte)(b[0] - 32);
b[1] = 255;
c[i] = System.Text.Encoding.Unicode.GetChars(b)[0];
}
}
}
string strNew = new string(c);
return strNew;
}
/// <summary>
/// 全角转半角
/// </summary>
/// <param name="QJstr"></param>
/// <returns></returns>
static public string GetBanJiao(string QJstr)
{
char[] c = QJstr.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
byte[] b = System.Text.Encoding.Unicode.GetBytes(c, i, 1);
if (b.Length == 2)
{
if (b[1] == 255)
{
b[0] = (byte)(b[0] + 32);
b[1] = 0;
c[i] = System.Text.Encoding.Unicode.GetChars(b)[0];
}
}
}
string strNew = new string(c);
return strNew;
}
二、如何区分是半角还是全角
在网上找资料看到很多网友说,可以直接使用
System.Text.UnicodeEncoding.Unicode.GetByteCount(字符串)
如果值为1则半角;0为全角
我测试了一下根本不是这么回事,VB和C#都是不行的
后来通过上面这个方法与length长度进行比较结果发现奥秘了,不知道自己的理解是不是准确
如果是半角的话,字符串的length属性等于System.Text.UnicodeEncoding.Unicode.GetByteCount(字符串)
而全角的System.Text.UnicodeEncoding.Unicode.GetByteCount(字符串)是length属性的2倍(包括中文以及全角的数字,字母)
我的测试环境:vs2005
也不知道我的测试环境的问题,网上那么多的网友都说测试半角与全角就用一个方法,将得到的结果和0,1进行比较!