Analisi delle cifre Unicode

Lo standard Unicode definisce i valori di codice per le cifre nei diversi script. I valori di codici nell'intervallo compreso tra U+09E6 a U+09EF ad esempio specificano le cifre Bengali da 0 a 9, mentre i valori di codici 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 codici nell'intervallo compreso tra U+0030 e U+0039. Tutte le altre cifre Unicode vengono analizzate da .NET Framework come caratteri. Se si cerca di analizzare una stringa di cifre Bengali nell'intervallo compreso tra U+09E6 e U+09EF utilizzando il metodo Decimal.Parse, viene generata un'eccezione.

Nell'esempio di codice seguente viene utilizzato il metodo Decimal.Parse per analizzare le stringhe dei valori di codici 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 indioarabiche e le cifre Bengali non riescono e viene generata un'eccezione.

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
[C#]
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");
      }
   }
}

Vedere anche

Sviluppo di applicazioni internazionali | Unicode in .NET Framework | Struttura Decimal