本人在做项目时遇到这样的情况:读取Excel中别人输入的内容呢。但是有一个问题是,必须别人输入的是英文的逗号才行,我可以控制自己,但是控制别人有点不现实。所以想的是,别人输入什么样的逗号,我这边都能解释。
基础
全角:SBC case(sexagesimal to Binary Converter)六十进制转二进制
半角:DBC case(Decimal to Binary Converter)十进制转二进制
之所以叫全角半角:在屏幕上,一个汉字占两个标准字符的位置,因此把只占一个标准字符位置的英文字符所占位置叫“半角”,一般主要针对标准符号来说的。
半角是ASCII码中的各个符号。在ASCII码中,32-126为可现实字符,1-31,127为控制字符,不予考虑。
全角是GB22312-80(信息交换用汉字编码字符集·基本集)中的各个符号。对应的字符为65281-65374。
但是全角空格为12288,半角空格为32。全角半角相差65248,所以除了空格外,全角字符-65248 = 半角字符。
但是特别的是,不管是全角还是半角输入法打出来的汉字所占的都是两位,也就是全角,圆圈句号也是。但是点句号不是,点句号会改变大小,跟逗号一样,逗号能看出来改变形状,但其实也就是改变大小。而数字和字母会看到明显的所占位不同。到目前为止,我测试的只有圆圈句号和中文字不会改变占位。其他的都会变。
代码
一般来讲,字符串可以用char[],也可以用StringBuilder动态数组。
/// 半角转全角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToSBC(String input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32) //十进制中32为空格
{
c[i] = (char)12288;
continue;
}
if (c[i] < 127)
{ c[i] = (char)(c[i] + 65248); }
}
return new String(c);
}
///全角转半角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToDBC(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)//GB22312-80集中这一段对应ASCII码。
{ c[i]=(char)(c[i]-65248);}
}
return new String (c);
}
在main函数中这样写
string strSBC = ",。。中华1259test";
string result = ToDBC(strSBC);
Console.WriteLine("原来是"+strSBC+"\n"+"现在是"+result);
string strDBC = ",,..中华1259test";
string resultDBC = ToSBC(strDBC);
Console.WriteLine("原来是" + strDBC + "\n" + "现在是" + resultDBC);
Console.ReadKey();
就是这么简单,学习了两者之间的转换,学习了两种码是个什么东西。
注意String和string的区别,怎么设置动态字符串数组。