.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
相关产品推荐
相关产品推荐

