Comment : analyser des chiffres Unicode
Mise à jour : novembre 2007
La norme Unicode définit des valeurs de code pour les chiffres dans divers scripts. Par exemple, les valeurs de code situées dans l'intervalle de U+09E6 à U+09EF spécifient les chiffres bengalis de 0 à 9, et les valeurs de code de l'intervalle de U+FF10 à U+FF19 spécifient les chiffres pleine chasse de 0 à 9. Les seuls chiffres Unicode que .NET Framework analyse comme chiffres décimaux sont les chiffres ASCII de 0 à 9, spécifiés par les valeurs de code allant de U+0030 à U+0039. .NET Framework analyse tous les autres chiffres Unicode comme des caractères. .NET Framework analyse tous les autres chiffres Unicode comme des caractères. Toutefois, quand une application tente d'analyser une chaîne de chiffres bengalis de l'intervalle de U+09E6 à U+09EF à l'aide de la méthode Parse(), une exception est levée.
L'exemple de code suivant utilise la méthode Parse pour analyser des chaînes de valeurs de code Unicode comportant des chiffres de différents scripts. Les tentatives d'analyse de chiffres ASCII et de chiffres ASCII spécifiés sous la forme de valeurs de code Unicode réussissent. Les tentatives d'analyse des valeurs de code Unicode pour les chiffres pleine chasse, les chiffres arabes-hindis et les chiffres bengalis échouent et lèvent une exception.
Exemple
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");
}
}
}