如何将英文数字转换为阿拉伯数字,例如 196 转换为١٩٦?

How to convert an English number to an Arabic number e.g., 196 to ١٩٦?

有谁知道如何将 英语 数字如 196 转换为 阿拉伯语 形式如 ١٩٦ 在 .Net 核心 C# 中。

foreach (DataRow dr in ds.Tables[0].Rows)
{
    lstSurahs.Add(new Quran
    {
        ID         = Convert.ToInt32(dr["ID"].ToString()),
        DatabaseID = Convert.ToInt32(dr["DatabaseID"].ToString()),
        SuraID     = Convert.ToInt32(dr["SuraID"].ToString()),

        // Need Arabic Form
        VerseID    = Convert.ToInt32(dr["VerseID"].ToString().ConvertNumerals()), 

        AyahText   = dr["AyahText"].ToString()
    });
 }

以下方法应该如您所愿:

private string toArabicNumber(string input)
{
    var arabic = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
    for (int j = 0; j < arabic.Length; j++)
    {
        input = input.Replace(j.ToString(), arabic[j]);
    }
    return input;
}

或其他解决方案:

private string ConvertNumber(string englishNumber)
{
    string theResult = "";
    foreach (char ch in englishNumber)
    {
        theResult += (char)(1776 + char.GetNumericValue(ch));
    }
    return theResult;
}

也许看看 .net 中的全球化,将 exe 的语言设置为阿拉伯语(默认情况下)或在启动时它可能会自行开始工作。

要强制使用阿拉伯语,您可以使用: yourNumber.ToString("N2", CultureInfo.GetCultureInfo("ar-SA"));

看看https://dotnetfiddle.net/e1BX7M

没有这样的方法,但是我们可以实现;让我们尽可能地概括任务:

Given a string source and CultureInfo culture, turn all digits within source into national digits if culture provides them

代码:

  using System.Globalization;
  using System.Linq;

  ...

  public static partial class StringExtensions {
    public static String ConvertNumerals(this string source, 
                                         CultureInfo culture = null) {
      if (null == source)
        return null;

      if (null == culture)
        culture = CultureInfo.CurrentCulture;

      string[] digits = culture.NumberFormat.NativeDigits.Length >= 10 
        ? culture.NumberFormat.NativeDigits
        : CultureInfo.InvariantCulture.NumberFormat.NativeDigits;

      return string.Concat(source
        .Select(c => char.IsDigit(c)
           ? digits[(int) (char.GetNumericValue(c) + 0.5)]
           : c.ToString()));
    }
  } 

演示:

  // "ar-SA" is "arabic Saudi Arabia"
  Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("ar-SA")));
  // "en-US" is "english United States"
  Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("en-US"))); 

结果:

test ١٢٣
test 123