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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:21