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

Ahm*_*mad 2 .net c# .net-core arabic-support

有谁知道我们如何将英语数字转换196阿拉伯语形式,如???.Net CORE 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()
    });
 }
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 5

没有这样的方法,但是我们可以实现它;让我们尽可能将任务放在一般的位置:

给定string sourceCultureInfo culture,把所有数字 之内source进入全国数字,如果culture为他们提供

代码:

  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()));
    }
  } 
Run Code Online (Sandbox Code Playgroud)

演示:

  // "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"))); 
Run Code Online (Sandbox Code Playgroud)

结果:

test ???
test 123
Run Code Online (Sandbox Code Playgroud)

  • 当代码可以通过索引到数组来轻松编写来处理不包含单个“char”数字的情况(并且更容易理解启动)时,为什么要插入一个测试来测试是否有单个“char”数字呢? (3认同)