Procedura: analizzare cifre Unicode
Aggiornamento: novembre 2007
Lo standard Unicode definisce i valori di codice per le cifre nei diversi script. I valori di codice nell'intervallo compreso tra U+09E6 a U+09EF, ad esempio, specificano le cifre Bengali da 0 a 9, mentre i valori di codice nell'intervallo compreso tra U+FF10 a U+FF19 specificano le cifre Fullwidth da 0 a 9. Le uniche cifre Unicode che vengono analizzate da .NET Framework come decimali, tuttavia, sono le cifre ASCII da 0 a 9, specificate dai valori di codice nell'intervallo compreso tra U+0030 e U+0039. Tutte le altre cifre Unicode vengono analizzate da .NET Framework come caratteri. Di conseguenza, se l'applicazione tenta di analizzare una stringa di cifre Bengali nell'intervallo compreso tra U+09E6 e U+09EF utilizzando il metodo Parse(), viene generata un'eccezione.
Nell'esempio di codice riportato di seguito viene utilizzato il metodo Parse per analizzare le stringhe dei valori di codice Unicode che specificano le cifre in script differenti. I tentativi di analizzare le cifre ASCII e le cifre ASCII specificate come valori di codici Unicode riescono. I tentativi di analizzare i valori di codice Unicode per le cifre Fullwidth, le cifre indoarabiche e le cifre Bengali non riescono e viene generata un'eccezione.
Esempio
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");
}
}
}