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

标签 c# .net .net-core arabic-support

有谁知道我们如何将英文数字如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()
    });
 }

最佳答案

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

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

关于c# - 如何将英文数字转换为阿拉伯数字,例如 196 转换为١٩٦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58301263/

相关文章:

c# - 如何在运行时计算代码的校验和?

c# - 如何将 POST 请求正文中的有效 XML 提交到使用 XML 的 ASP.NET Core Web API?

c# - 如何在 asp.net mvc 4.0 中将来自相同用户名和密码的用户限制为来自两个系统/浏览器的逻辑?

.net - 迷你转储对 .NET 中的调试有用吗

c# - 什么时候应该使用 HashSet<T> 类型?

c# - Net Core app.UseMiddleware<T>() 和 app.Use(context, next) 之间的区别

c# - 如何使用 csproj 在 .net core 中注册测试发现者

c# - "Cannot access a disposed object"

c# - 非通用委托(delegate)的适配器

c# - MVVM:如何对控件进行函数调用?