Unicode字符中有多个表示数字的范围,char.IsDigit
返回true
。例如:
bool b1 = char.IsDigit('\uFF12'); // full-width '2' -> true
bool b2 = char.IsDigit('\u0665'); // true
bool b3 = char.IsDigit('5'); // true
我正在寻找一种方法来获得这些字符的数字等价物。请注意int.Parse(...)
不起作用,因为它期望输入字符在基本unicode范围内('0'..'9')。
这相当于Java的Character.digit(...)
行为。
由于.NET框架的char.IsDigit
方法正确地将这些字符标识为数字,我希望它也具有此功能,但我找不到任何内容。
答案 0 :(得分:7)
你试过Char.GetNumericValue
吗? (我只是启动我的Windows笔记本电脑来检查:)
编辑:刚尝试过 - 看起来很有效:
Console.WriteLine(char.GetNumericValue('\uFF12')); // 2
Console.WriteLine(char.GetNumericValue('\u0665')); // 5
Console.WriteLine(char.GetNumericValue('5')); // 5
请注意,此不只包含数字 - 它是任何数字字符。但是,IsDigit
仅适用于数字。例如:
// U+00BD is the Unicode "vulgar fraction one half" character
Console.WriteLine(char.IsDigit('\u00bd')); // False
Console.WriteLine(char.GetNumericValue('\u00bd')); // 0.5