Gewusst wie: Analysieren von Unicode-Ziffern

Aktualisiert: November 2007

Der Unicode-Standard definiert Codewerte für Ziffern in verschiedenen Skripts. Codewerte im Bereich von U+09E6 bis U+09EF legen beispielsweise die Bengali-Ziffern von 0 bis 9 fest, während Codewerte im Bereich von U+FF10 bis U+FF19 die vollbreiten Ziffern von 0 bis 9 festlegen. Die einzigen Unicode-Ziffern, die .NET Framework als Dezimalzahlen analysiert, sind die ASCII-Ziffern von 0 bis 9, die durch die Codewerte U+0030 bis U+0039 angegeben werden. Alle anderen Unicode-Ziffern werden von .NET Framework als Zeichen analysiert. Daher wird bei dem Versuch, eine Zeichenfolge mit Bengali-Ziffern im Bereich U+09E6 bis U+09EF mithilfe der Parse()-Methode zu analysieren, eine Ausnahme ausgelöst.

Das folgende Codebeispiel verwendet die Parse-Methode, um Zeichenfolgen mit Unicode-Codewerten zu analysieren, die Ziffern in verschiedenen Skripts angeben. Die Versuche, ASCII-Ziffern und als Unicode-Codewerte angegebene ASCII-Ziffern zu analysieren, sind erfolgreich. Die Versuche, Unicode-Codewerte für vollbreite Ziffern, arabisch-indische Ziffern und Bengali-Ziffern zu analysieren, schlagen fehl und führen zum Auslösen einer Ausnahme.

Beispiel

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");
      }
   }
}

Siehe auch

Konzepte

Unicode in .NET Framework