4

アラビア数字の文字列「٠١٢٣٤٥٦٧٨٩」を英語の数字文字列「0123456789」に変換する方法を探しています。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       dim Anum as string ="٠١٢٣٤٥٦٧٨٩"
       dim Enum as string =get_egnlishNum(Anum)
End Sub

private function get_egnlishNum(byval _Anum as string) as string

''   converting code

end function
4

4 に答える 4

3

数値の Unicode 文字を double に変換GetNumericValueするタイプのメソッドを探しています。char例えば:

double two = char.GetNumericValue('٢');
Console.WriteLine(two); // prints 2

あなたの例では:

static string ArabicToWestern(string input)
{
    StringBuilder western = new StringBuilder();
    foreach(char num in input)
    {
        western.Append(char.GetNumericValue(num));
    }
    return western.ToString();
}

必要に応じて変更します。

VB.NET:

Private Shared Function ArabicToWestern(ByVal input As String) As String
    Dim western As StringBuilder = New StringBuilder
    For Each num As Char In input
        western.Append(Char.GetNumericValue(num))
    Next
    Return western.ToString
End Function
于 2012-03-20T11:46:08.310 に答える
2

これは解決策の1つです。

Function Convert(ByVal input As String) As String
    Dim source = "٠١٢٣٤٥٦٧٨٩"
    Dim target = "0123456789"
    Dim sb As New StringBuilder()
    For Each el in Input
        sb.Append(target(source.IndexOf(el)))
    Next
    Return sb.ToString
End Function

編集

私はもっ​​と「ネイティブ」な方法を見つけようとしました。私が見つけたのは、NumberFormatInfoクラスのNativeDigitsプロパティです。

これは私のテストコードでしたが、成功しませんでした。しかし、それは良い出発点になる可能性があります。

        Dim source = "١٢٣٤٥٦٧٨٩"
        Dim result As Integer
        Dim numInfo As new NumberFormatInfo()
        numInfo.NativeDigits = New String() { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" }
        Int32.TryParse(source, NumberStyles.Any, numInfo, result)
于 2012-03-20T11:26:53.470 に答える
1

アラビア語の文字を西洋のバージョンに置き換えるだけです。

Dim arabicDigits = "٠١٢٣٤٥٦٧٨٩".ToCharArray
Dim s = "‏٠٦٦٢٧٣٩٦عدد النقاط هي ٩٩٣٩٣٥"

For i = 0 To arabicDigits.Length - 1
    s = s.Replace(arabicDigits(i), i.ToString)
Next

s には " 06627396عدد النقاط ڷ 993935" が含まれるようになりました。

于 2012-03-20T20:50:18.410 に答える