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

网页爬取中非阿拉伯数字转int失败,求解决方案

解决非拉丁数字转int的问题

嘿,我来帮你搞定这个头疼的转换问题!你碰到的是非ASCII数字字符转换的典型坑——"۲۳"是波斯(属于阿拉伯数字体系)的数字字符,.NET默认的int.Parse和Convert.ToInt32只会认0-9的拉丁数字,直接转肯定会报「输入字符串格式不正确」的错误。而且你之前试的编码转换完全没用,因为编码转换只是改变字符的字节存储格式,根本没把波斯数字字符换成拉丁数字,自然还是转失败啦。

给你两个靠谱的解决方案:

方法一:指定对应文化(推荐)

直接利用.NET的文化信息(CultureInfo),让Parse方法识别波斯数字。波斯文化的代码是fa-IR,阿拉伯文化(比如沙特阿拉伯ar-SA)也能识别这类数字,代码示例:

using System.Globalization;

// 你的波斯数字字符串
string persianNumber = "۲۳";
// 用波斯文化解析
int convertedNum = int.Parse(persianNumber, new CultureInfo("fa-IR"));
// 或者用阿拉伯文化也可以
// int convertedNum = int.Parse(persianNumber, new CultureInfo("ar-SA"));

Console.WriteLine(convertedNum); // 输出:23

原理很简单:指定文化后,Parse会根据该文化的NumberFormatInfo自动映射非拉丁数字到对应的拉丁数字,完成转换。

方法二:手动字符映射

如果不想依赖文化信息,也可以手动创建字符映射字典,把波斯数字替换成拉丁数字后再转换:

using System.Linq;
using System.Collections.Generic;

// 构建波斯数字到拉丁数字的映射字典
var persianToLatin = new Dictionary<char, char>
{
    {'۰', '0'}, {'۱', '1'}, {'۲', '2'}, {'۳', '3'}, {'۴', '4'},
    {'۵', '5'}, {'۶', '6'}, {'۷', '7'}, {'۸', '8'}, {'۹', '9'}
};

string persianNumber = "۲۳";
// 替换所有波斯数字字符
string latinNumber = new string(
    persianNumber.Select(c => persianToLatin.ContainsKey(c) ? persianToLatin[c] : c).ToArray()
);
// 现在就可以正常转int了
int convertedNum = int.Parse(latinNumber);

Console.WriteLine(convertedNum); // 输出:23

额外提醒

如果你的字符串里可能混有其他非数字字符,建议用int.TryParse来做安全转换,避免抛出异常:

if (int.TryParse(persianNumber, NumberStyles.Any, new CultureInfo("fa-IR"), out int num))
{
    Console.WriteLine($"转换成功:{num}");
}
else
{
    Console.WriteLine("字符串包含无效字符,转换失败");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:36