問題背景說明
開發中,需要判斷一個輸入字符是不是數字字符,若是數字字符的話就轉換成整數。
問題提出
在實現過程中,使用過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方法卻沒有,所以對全角半角字符分別對待。
今天就說到這裡吧,感覺還有些想說的,不太想寫了,以後有空再補充吧。
這裡主要是想提出問題,望有了解的大牛能指點一二。