You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core C#中如何将英文数字转换为阿拉伯数字(如196转١٩٦)

如何在.NET Core C#中将英文数字转换为阿拉伯文数字(适配DataRow遍历场景)

针对你在遍历DataRow集合时需要把VerseID转换成阿拉伯文数字(比如196 → ١٩٦)的需求,我提供两种实用的解决方案,你可以根据自己的代码场景选择:

方案一:自定义字符串扩展方法(灵活处理任意含数字的字符串)

这种方法通过直接替换字符的方式,把字符串中的英文数字逐个转换成对应的阿拉伯文数字,适合VerseID可能包含非数字字符(虽然你的场景里应该是纯数字,但扩展性更强)的情况。

首先创建一个字符串扩展类:

public static class StringExtensions
{
    // 扩展方法:将字符串中的英文数字转为阿拉伯文数字
    public static string ConvertToArabicNumerals(this string input)
    {
        if (string.IsNullOrWhiteSpace(input))
            return input;

        // 阿拉伯文数字的字符数组,索引对应0-9
        char[] arabicDigits = { '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩' };
        char[] resultChars = new char[input.Length];

        for (int i = 0; i < input.Length; i++)
        {
            if (char.IsDigit(input[i]))
            {
                // 计算当前数字对应的阿拉伯文字符索引
                int digitIndex = input[i] - '0';
                resultChars[i] = arabicDigits[digitIndex];
            }
            else
            {
                // 非数字字符保持不变
                resultChars[i] = input[i];
            }
        }

        return new string(resultChars);
    }
}

然后修改你的遍历代码,注意如果Quran类的VerseID字段是string类型(因为阿拉伯文数字是字符形式,无法存为int),直接调用扩展方法即可:

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()), 
        // 直接转换VerseID的字符串为阿拉伯文数字
        VerseID = dr["VerseID"].ToString().ConvertToArabicNumerals(), 
        AyahText = dr["AyahText"].ToString() 
    }); 
}

方案二:利用.NET本地化格式化(纯数字场景更规范)

如果VerseID是确定的纯数字,推荐使用.NET自带的本地化功能,通过阿拉伯文化区域来格式化数字,代码更简洁且符合框架规范。

创建一个int类型的扩展方法:

public static class IntExtensions
{
    // 扩展方法:将整数转为阿拉伯文数字字符串
    public static string ToArabicNumerals(this int number)
    {
        // 使用阿拉伯联合酋长国的文化区域(也可以用ar-SA等其他阿拉伯文化)
        CultureInfo arabicCulture = new CultureInfo("ar-AE");
        return number.ToString(arabicCulture);
    }
}

然后修改遍历代码,先把VerseID转成int,再调用扩展方法转换为阿拉伯文数字字符串:

foreach (DataRow dr in ds.Tables[0].Rows) 
{
    int verseId = Convert.ToInt32(dr["VerseID"].ToString());
    
    lstSurahs.Add(new Quran 
    { 
        ID = Convert.ToInt32(dr["ID"].ToString()), 
        DatabaseID = Convert.ToInt32(dr["DatabaseID"].ToString()), 
        SuraID = Convert.ToInt32(dr["SuraID"].ToString()), 
        VerseID = verseId.ToArabicNumerals(), 
        AyahText = dr["AyahText"].ToString() 
    }); 
}

关键注意事项

  • 确保Quran类的VerseID字段类型是string,因为阿拉伯文数字是Unicode字符,无法存储为int类型(如果你的业务逻辑需要保留数字值,建议新增一个VerseIdNumeric字段存int,VerseID字段存阿拉伯文数字字符串)。
  • 如果只是在界面显示时需要阿拉伯文数字,不需要修改实体类,可以在显示时直接调用转换方法,比如@verse.VerseIdNumeric.ToArabicNumerals()(Razor视图场景)。

内容的提问来源于stack exchange,提问作者Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:15:45