C# 全角半角的问题

本人在做项目时遇到这样的情况:读取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的区别,怎么设置动态字符串数组。

猜你喜欢

转载自blog.csdn.net/qq_36196748/article/details/81869846