程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中為什麼兩個函數對全角半角數字字符的處理方式不一樣

C#中為什麼兩個函數對全角半角數字字符的處理方式不一樣

編輯: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方法卻沒有,所以對全角半角字符分別對待。

今天就說到這裡吧,感覺還有些想說的,不太想寫了,以後有空再補充吧。

這裡主要是想提出問題,望有了解的大牛能指點一二。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved