C#实现英文数字转阿拉伯数字存入数据库时遇错误求助
解决阿拉伯文数字转标准阿拉伯数字(0-9)的代码错误问题
看起来你在尝试把阿拉伯文的数字字符(比如٠、١、٢这类)转换成标准0-9数字并存入数据库时遇到了问题,先看看你给出的代码片段,我来帮你排查和修正:
首先你当前的代码只写了开头框架,核心转换逻辑没完成,而且用UTF8编码解码的方式处理字符转换其实绕了弯路——阿拉伯文数字和标准数字有固定的Unicode偏移量,直接计算会更高效可靠。
问题分析
你代码里的byte[] bytes = new byte[] { 217, 160 };对应的是UTF-8编码的阿拉伯数字0(٠),但这种通过字节解码处理每个字符的方式不仅繁琐,还容易因为环境编码差异出现错误,不是最优解。
修正后的完整实现
下面是简洁可靠的转换代码,利用Unicode字符偏移量实现:
public static string ConvertNumerals(string input) { if (string.IsNullOrEmpty(input)) return input; StringBuilder convertedChars = new StringBuilder(); foreach (char c in input) { // 处理阿拉伯文数字(٠到٩,Unicode范围U+0660 至 U+0669) if (c >= '\u0660' && c <= '\u0669') { // 通过偏移量转换为标准0-9数字 convertedChars.Append((char)(c - '\u0660' + '0')); } // 额外支持阿拉伯-印度数字(۰到۹,Unicode范围U+06F0 至 U+06F9) else if (c >= '\u06F0' && c <= '\u06F9') { convertedChars.Append((char)(c - '\u06F0' + '0')); } // 非数字字符直接保留 else { convertedChars.Append(c); } } return convertedChars.ToString(); }
方案优势
- 直接操作Unicode字符,避开编码解码的复杂逻辑,彻底避免编码错误
- 同时覆盖两种常见的阿拉伯数字体系,适配更多场景
- 代码简洁易懂,性能也比编码解码方式更高
测试验证
你可以用这段代码测试效果:
string testInput = "الرقم هو ١٢٣ و ۴۵۶"; string result = ConvertNumerals(testInput); // 输出结果:الرقم هو 123 و 456
这样修改后,应该就能正确完成转换并顺利存入数据库了。
内容的提问来源于stack exchange,提问作者Mustafa ShazLy
相关产品推荐
相关产品推荐

