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

原创 2013年12月01日 21:27:13

问题背景说明

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

 

问题提出

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

 

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

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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

禁止 WORDPRESS 将英文半角符号转换成全角符号(字符转义)

WordPress 模式使用了 wptexturize 函数将纯文本字符转换成格式化的 HTML 实体。标签, , , , 和 中的文本被忽略。对于一般写单纯码文字的人来说,这个自动将英文半角符号转换...

python 匹配文本全角转半角字符

在对文本进行处理的时候经常会遇见要对括号和标点进行匹配 常见的英文(半角)符号如( ) 直接用正则匹配即可 但是遇见全角字符(中文括号、标点),直接用正则匹配会存在问题: 因为编码通常为为utf...

java中全角半角字符的相互转换

package com.whatycms.common.util; import org.apache.commons.lang.StringUtils; /** * * 提供对字符串的全角...

Java工具类——全角半角字符相互转换

import org.apache.commons.lang.StringUtils;          /**    *     * 提供对字符串的全角->半角,半角->全角转换    *...

SQL Server中全角和半角字符的比较问题

这是一个在我实际一个项目中遇到的问题。03BHL01001(上海)和03BHL01001(上海)比较的结果是一样的。导致引起的重复的主键问题。 php学习之家   03BHL01001(上海)...

python 判断unicode字符串是汉字/数字/字母,全角/半角转换

文本处理经常会判断字符串是否是字母,数字或者汉字的问题,python str模块提供了些方法,但是不支持unicode,所以模仿str的相关方法,实现了unicode 字符串的汉字/数字/字母判断方法...
  • xuh5156
  • xuh5156
  • 2013年06月17日 13:55
  • 3566

半角、全角 字符串互转\提取中文或数字

/*   半角字符串转全角 */ if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_i...

java中全角半角字符的相互转换

import org.apache.commons.lang.StringUtils; /** * * 提供对字符串的全角->半角,半角->全角转换 * */ public ...

SQLServer中全角和半角字符的比较 已解决

/*------------------------------------------------------------------------------------ /*欢迎转载,请保留本声明...

python学习笔记-半角字符和全角之间的转换

背景:在做日文文本的处理时候,统一半全角字符。分析:说明: 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E) 半角字符unicode编码从33~12...
  • ljp1919
  • ljp1919
  • 2017年03月31日 14:37
  • 460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中为什么两个函数对全角半角数字字符的处理方式不一样
举报原因:
原因补充:

(最多只允许输入30个字)