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

3

有没有人知道如何将类似 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()
    });
 }

1
就记一下,196... 是阿拉伯数字,而١٩٦... 是印度数字 - user10216583
3个回答

6

虽然没有这样的方法,但我们可以实现它。让我们把任务尽可能地通用化:

给定一个字符串源和CultureInfo文化,如果CultureInfo提供了国家数字,则将源中的所有数字转换为国家数字

代码:

  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

3
为什么要插入一个测试以检测只有一个字符的数字,当代码可以很容易地编写为处理它们不是单个字符(而且更容易理解),通过对数组进行索引? - undefined
@Jeroen Mostert:谢谢!我明白了;提取单个“零”字符不是最好的方法。 - undefined
ci变量是从哪里来的?我猜它代表CultureInfo,所以这就是你的culture变量,对吗? - undefined
另一个可能的改进是在涉及没有数字的文化环境中使用CultureInfo.InvariantCultureCultureInfo.InvariantCulture.NumberFormat.NativeDigits正是你期望的数组。 - undefined
@Jeroen Mostert:谢谢!CultureInfo.InvariantCulture.NumberFormat.NativeDigits更易读。 - undefined

1
以下方法应该按照您所希望的方式工作:
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;
}

0
也许可以看一下在.NET中的全球化,将exe文件的语言设置为阿拉伯语(默认情况下),或者在启动时设置,它可能会自动开始工作。
要强制使用阿拉伯语,可以使用以下代码: yourNumber.ToString("N2", CultureInfo.GetCultureInfo("ar-SA"));
请查看https://dotnetfiddle.net/e1BX7M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接