如何:分析 Unicode 数字
更新:2007 年 11 月
Unicode 标准为各种脚本的数字定义了代码值。例如,介于 U+09E6 到 U+09EF 之间的代码值指定孟加拉文数字 0 到 9,介于 U+FF10 到 U+FF19 之间的代码值指定全角数字 0 到 9。唯一被 .NET Framework 分析为十进制数的 Unicode 数字是 ASCII 数字 0 到 9,它们由 U+0030 到 U+0039 之间的代码值指定。.NET Framework 将其他所有 Unicode 数字都分析为字符。因此,当应用程序尝试使用 Parse() 方法来分析一串介于 U+09E6 到 U+09EF 之间的孟加拉文数字时,将引发异常。
下面的代码示例使用 Parse 方法来分析在不同文字中指定数字的 Unicode 代码值串。分析 ASCII 数字和指定为 Unicode 代码值的 ASCII 数字的尝试将成功。分析全形数字、阿拉伯-印度文数字和孟加拉文数字的 Unicode 代码值的尝试将失败并引发异常。
示例
Imports System
Imports Microsoft.VisualBasic
Public Class TestClass
Public Shared Sub Main()
' Parses a string of ASCII digits 1-5.
Dim strDigits As [String] = "12345"
' Parsing succeeds.
Parse(strDigits)
' Parses a string ASCII Digits 1-5 specified as Unicode code values.
Dim strUdigits As [String] = "\u0031\u0032\u0033\u0034\u0035"
' Parsing succeeds.
Parse(strUdigits)
' Parses a string of Fullwidth digits 1-5
' specified as Unicode code values.
Dim strFdigits As [String] = "\uFF11\uFF12\uFF13\uFF14\uFF15"
' Parsing fails.
Parse(strFdigits)
' Parses a string of Arabic-Indic digits 1-5
' specified as Unicode code values.
Dim strAdigits As [String] = "\u0661\u0662\u0663\u0664\u0665"
' Parsing fails.
Parse(strAdigits)
' Parses a string of Bengali digits 1-5
' specified as Unicode code values.
Dim strBdigits As [String] = "\u09E7\u09E8\u09E9\u09EA\u09EB"
' Parsing fails.
Parse(strBdigits)
End Sub
Public Shared Sub Parse(str As [String])
Try
Dim dc As [Decimal] = [Decimal].Parse(str)
Console.WriteLine("Parsing string {0} succeeded: {1} " + _
ControlChars.Newline, str, dc)
Catch e As Exception
Console.WriteLine("Parsing string {0} failed", str)
Console.WriteLine(e.ToString())
Console.WriteLine(ControlChars.Newline)
End Try
End Sub
End Class
using System;
public class TestClass
{
public static void Main()
{
// Parses a string of ASCII digits 1-5.
String strDigits = "12345";
// Parsing succeeds.
Parse(strDigits);
// Parses a string of ASCII Digits 1-5 specified
// as Unicode code values.
String strUdigits = "\u0031\u0032\u0033\u0034\u0035";
// Parsing succeeds.
Parse(strUdigits);
// Parses a string of Fullwidth digits 1-5 specified as
// Unicode code values.
String strFdigits = "\uFF11\uFF12\uFF13\uFF14\uFF15";
// Parsing fails.
Parse(strFdigits);
// Parses a string of Arabic-Indic digits 1-5 specified as
// Unicode code values.
String strAdigits = "\u0661\u0662\u0663\u0664\u0665";
// Parsing fails.
Parse(strAdigits);
// Parses a string of Bengali digits 1-5 specified as
// Unicode code values.
String strBdigits = "\u09E7\u09E8\u09E9\u09EA\u09EB";
// Parsing fails.
Parse(strBdigits);
}
public static void Parse(String str)
{
try
{
Decimal dc = Decimal.Parse(str);
Console.WriteLine("Parsing string {0} succeeded: {1}\n",str, dc);
}
catch (Exception e)
{
Console.WriteLine("Parsing string {0} failed", str);
Console.WriteLine(e.ToString());
Console.WriteLine("\n");
}
}
}