关闭

C#中为什么两个函数对全角半角数字字符的处理方式不一样

标签: IsDigitTryParse全角数字半角数字ASCII字符
1673人阅读 评论(0) 收藏 举报
分类:

问题背景说明

开发中,需要判断一个输入字符是不是数字字符,若是数字字符的话就转换成整数。

 

问题提出

在实现过程中,使用过char.IsDigit方法以及int.TryParse方法。发现,当输入的数字字符为全角数字字符时,char.IsDigit会将其判定为数字字符,而使用int.TryParse方法时,却不将其判定为数字字符。这是为什么呢?

 

问题重现

实例代码

using System;
namespace QuanJiaoShuZiExp
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "4";
            string str2 = "4";
            Console.WriteLine(char.IsDigit(str1, 0));
            Console.WriteLine(char.IsDigit(str2, 0));
 
            int result;
            Console.WriteLine(int.TryParse(str1, out result));
            Console.WriteLine(int.TryParse(str2, out result));
        }
    }
}
代码执行结果

 

结果显示:当输入半角数字字符时,char.IsDigit方法和int.TryParse方法都返回true;当输入全角数字字符时,char.IsDigit方法返回true,而int.TryParse方法返回false。

 

问题探讨

到底为什么呢?

要回答这个问题看来得问微软了,因为这两个方法是微软实现的。

不管微软是怎么想的,我从自己的角度来谈谈对这个问题的看法。

首先,我们知道,半角是国际输入法标准用法,中国输入法为了适应中国人的输入习惯,加入了全角。其次,我们知道,半角是ASCII方式的字符;而全角是指GB2312-80(《信息交换用汉字编码字符集·基本集》)中的各种符号。既然,全角字符与半角字符来源于不同的字符集,所以全角数字字符和半角数字字符的编码也有可能不一样(关于这点,我不敢肯定,因为对GB2312-80编码了解的不多,高人请赐教),于是,我大胆猜想,char.IsDigit方法可能对输入字符进行了编码上的转换操作,才使全角数字字符与半角数字字符等价,而int.TryParse方法却没有,所以对全角半角字符分别对待。

 

今天就说到这里吧,感觉还有些想说的,不太想写了,以后有空再补充吧。

这里主要是想提出问题,望有了解的大牛能指点一二。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:845641次
    • 积分:11150
    • 等级:
    • 排名:第1413名
    • 原创:296篇
    • 转载:47篇
    • 译文:0篇
    • 评论:133条
    最新评论