Ami*_*ban 27 .net c# cultureinfo persian string-parsing
我想更改保存在变量中的波斯数字,如下所示:
string Value="???????";
Run Code Online (Sandbox Code Playgroud)
至
string Value="1036751";
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用像文化信息这样简单的方法来做到这一点?
我的示例代码是:
List<string> NERKHCOlist = new List<string>();
NERKHCOlist = ScrappingFunction(NERKHCO, NERKHCOlist);
int NERKHCO_Price = int.Parse(NERKHCOlist[0]);//NERKHCOlist[0]=???????
Run Code Online (Sandbox Code Playgroud)
<=所以它不能解析为int
这是在我的函数中,它返回列表项中包含波斯数字的列表
protected List<string> ScrappingFunction(string SiteAddress, List<string> NodesList)
{
string Price = "null";
List<string> Targets = new List<string>();
foreach (var path in NodesList)
{
HtmlNode node = document.DocumentNode.SelectSingleNode(path.ToString());//recognizing Target Node
Price = node.InnerHtml;//put text of target node in variable(PERSIAN DIGITS)
Targets.Add(Price);
}
return Targets;
}
Run Code Online (Sandbox Code Playgroud)
小智 19
只需使用以下代码:
private string toPersianNumber(string input)
{
string[] persian = new string[10] { "?", "?", "?", "?", "?", "?", "?", "?", "?", "?" };
for (int j=0; j<persian.Length; j++)
input = input.Replace(persian[j], j.ToString());
return input;
}
Run Code Online (Sandbox Code Playgroud)
M.R*_*017 12
使用文化将数字从任何语言转换为任何语言
功能:
public static string ConvertDigitChar(this string str, CultureInfo source, CultureInfo destination)
{
for (int i = 0; i <= 9; i++)
{
str = str.Replace(source.NumberFormat.NativeDigits[i], destination.NumberFormat.NativeDigits[i]);
}
return str;
}
public static string ConvertDigitChar(this int digit, CultureInfo destination)
{
string res = digit.ToString();
for (int i = 0; i <= 9; i++)
{
res = res.Replace(i.ToString(), destination.NumberFormat.NativeDigits[i]);
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
如何使用功能:
var fa = CultureInfo.GetCultureInfoByIetfLanguageTag("fa");
var en = CultureInfo.GetCultureInfoByIetfLanguageTag("en");
string str = "?0?1?2?3?4?5?6?7?8?9";
string r1 = str.ConvertDigitChar(en, fa);
string r2 = str.ConvertDigitChar(fa, en);
int i = 123456789;
string r3 = i.ConvertDigitChar(fa);
Run Code Online (Sandbox Code Playgroud)
结果:
R1: "????????????????????"
R2: "00112233445566778899"
R3: "??????????"
Ima*_*our 11
我建议使用两种方法来解决此问题(我为每种方法创建一个扩展方法):
1.foreach和更换
public static class MyExtensions
{
public static string PersianToEnglish(this string persianStr)
{
Dictionary<char, char> LettersDictionary = new Dictionary<char, char>
{
['?'] = '0',['?'] = '1',['?'] = '2',['?'] = '3',['?'] = '4',['?'] = '5',['?'] = '6',['?'] = '7',['?'] = '8',['?'] = '9'
};
foreach (var item in persianStr)
{
persianStr = persianStr.Replace(item, LettersDictionary[item]);
}
return persianStr;
}
}
Run Code Online (Sandbox Code Playgroud)
2,词典汇总
public static class MyExtensions
{
public static string PersianToEnglish(this string persianStr)
{
Dictionary<string, string> LettersDictionary = new Dictionary<string, string>
{
["?"] = "0",["?"] = "1",["?"] = "2",["?"] = "3",["?"] = "4",["?"] = "5",["?"] = "6",["?"] = "7",["?"] = "8",["?"] = "9"
};
return LettersDictionary.Aggregate(persianStr, (current, item) =>
current.Replace(item.Key, item.Value));
}
}
Run Code Online (Sandbox Code Playgroud)
有关Dictionary.Aggregate:Microsoft的更多信息
用法:
string result = "???????".PersianToEnglish();
Run Code Online (Sandbox Code Playgroud)
我编写了这个扩展方法来将字符串中的阿拉伯和波斯数字转换为其拉丁表示
public static class Extensions
{
public static string ConvertDigitsToLatin(this string s)
{
var sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
switch (s[i])
{
//Persian digits
case '\u06f0':
sb.Append('0');
break;
case '\u06f1':
sb.Append('1');
break;
case '\u06f2':
sb.Append('2');
break;
case '\u06f3':
sb.Append('3');
break;
case '\u06f4':
sb.Append('4');
break;
case '\u06f5':
sb.Append('5');
break;
case '\u06f6':
sb.Append('6');
break;
case '\u06f7':
sb.Append('7');
break;
case '\u06f8':
sb.Append('8');
break;
case '\u06f9':
sb.Append('9');
break;
//Arabic digits
case '\u0660':
sb.Append('0');
break;
case '\u0661':
sb.Append('1');
break;
case '\u0662':
sb.Append('2');
break;
case '\u0663':
sb.Append('3');
break;
case '\u0664':
sb.Append('4');
break;
case '\u0665':
sb.Append('5');
break;
case '\u0666':
sb.Append('6');
break;
case '\u0667':
sb.Append('7');
break;
case '\u0668':
sb.Append('8');
break;
case '\u0669':
sb.Append('9');
break;
default:
sb.Append(s[i]);
break;
}
}
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样手动转换它们
char[][] numbers = new char[][]
{
"0123456789".ToCharArray(),"persian numbers 0-9 here".ToCharArray()
};
public void Convert(string problem)
{
for (int x = 0; x <= 9; x++)
{
problem.Replace(numbers[0][x], numbers[1][x]);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道波斯数字,所以你必须将它们添加到char数组中.