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

问题背景说明

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

 

问题提出

在实现过程中,使用过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方法却没有,所以对全角半角字符分别对待。

 

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值