C# 如何使用区域性将变量中的波斯语数字转换为英语数字?

C# 如何使用区域性将变量中的波斯语数字转换为英语数字?,c#,.net,cultureinfo,string-parsing,persian,C#,.net,Cultureinfo,String Parsing,Persian,我想更改保存在变量中的波斯数字,如下所示: string Value="۱۰۳۶۷۵۱"; 到 我怎样才能使用简单的方式,如文化信息来做到这一点,请 我的示例代码是: List<string> NERKHCOlist = new List<string>(); NERKHCOlist = ScrappingFunction(NERKHCO, NERKHCOlist); int NERKHCO_Price = int.Parse(NERKHCOlist[0]);//NE

我想更改保存在变量中的波斯数字,如下所示:

string Value="۱۰۳۶۷۵۱"; 

我怎样才能使用简单的方式,如文化信息来做到这一点,请

我的示例代码是:

List<string> NERKHCOlist = new List<string>();
NERKHCOlist = ScrappingFunction(NERKHCO, NERKHCOlist);
int NERKHCO_Price = int.Parse(NERKHCOlist[0]);//NERKHCOlist[0]=۱۰۳۶۷۵۱ 
List NERKHCOlist=newlist();
NERKHCOlist=报废功能(NERKHCO,NERKHCOlist);
int NERKHCO_Price=int.Parse(NERKHCOlist[0])//NERKHCOlist[0]=۱۰۳۷۵۱

您需要首先解析它们,例如使用Int32.parse()和正确的文化说明符。一旦将其作为一个普通整数,只需对其调用ToString(),同样使用正确的文化说明符即可

另一种解决方案是逐个字符遍历字符串,并用相应的字符替换任何波斯数字字符。如果需要,其他字符可以按原样保留


如果字符串确实包含数字,则应使用整数解析方法。如果它不仅仅是一个号码,而是一个电话号码、序列号等,您可能需要使用替换算法。

您可以像这样手动转换它们

    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]);
        }
    }
char[][]数字=新字符[][]
{
“0123456789”.ToCharArray(),“这里的波斯数字0-9”。ToCharArray()
};
公共void转换(字符串问题)
{

对于(int x=0;x您可以使用该类来解析字符串。这将解析任何受支持的数字系统中的字符串(只要它内部一致)。

只需使用以下代码即可:

private string changePersianNumbersToEnglish(string input)
{
  string[] persian = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };

   for (int j=0; j<persian.Length; j++)
      input = input.Replace(persian[j], j.ToString());

   return input;
 }
私有字符串更改persiannumberstoenglish(字符串输入)
{
字符串[]波斯语=新字符串[10]{“۰”、“۱”、“۲”、“۳”、“۴”、“۵”、“۶”、“۷”、“۹”};

对于(intj=0;j,我编写了这个扩展方法来将字符串中的阿拉伯语和波斯语数字转换为其拉丁表示形式

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();
    }
}
公共静态类扩展
{
公共静态字符串convertDigitTolatin(此字符串为s)
{
var sb=新的StringBuilder();
对于(int i=0;i
使用区域性将数字从任何语言转换为任何语言

职能:

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;
}
结果:

r1:
“۰۱۲۳۴۵۶۷۸۹۹”

r2:
“00112233445566778899”


r3:
“使用此静态类轻松更改规范化数字:

public static class Numbers
{
    public static string ChangeToEnglishNumber(this string text)
    {
        var englishNumbers = string.Empty;
        for (var i = 0; i < text.Length; i++)
        {
            if(char.IsNumber(text[i])) englishNumbers += char.GetNumericValue(text, i);
            else englishNumbers += text[i];
        }

        return englishNumbers;
    }
}

这里我的代码将变量中的波斯语数字转换为英语 ,通过扩展方法(可在表达式后与点一起使用)

私有静态只读字符串[]pn={“۰”、“۱”、“۲”、“۳”、“۴”、“۵”、“۷”、“۸”、“۹”};
私有静态只读字符串[]en={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
公共静态字符串ToEnglishNumber(此字符串strNum)
{
字符串chash=strNum;
对于(int i=0;i<10;i++)
裂缝=裂缝替换(pn[i],en[i]);
返回裂缝;
}
公共静态字符串ToEnglishNumber(此int intNum)
{
字符串chash=intNum.ToString();
对于(int i=0;i<10;i++)
裂缝=裂缝替换(pn[i],en[i]);
返回裂缝;
}
当您想使用此代码时,必须编写:
txt1.Value.ToEnglishNumber();

Saeed的解决方案是可以的,但是对于双变量,您还必须将“٫”字符替换为“.”,因此您可以使用:

private string ToEnglishNumber(string strNum)
{
string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "٫" };
string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","." };
string chash = strNum;
for (int i = 0; i < 11; i++)
    chash = chash.Replace(pn[i], en[i]);
return chash;
}
私有字符串到英语数字(字符串strNum)
{
字符串[]pn={“۰”、“۱”、“۲”、“۳”、“۴”、“۶”、“۷”、“۸”、“۹”、“٫”};
字符串[]en={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“4”};
字符串chash=strNum;
对于(int i=0;i<11;i++)
裂缝=裂缝替换(pn[i],en[i]);
返回裂缝;
}
公共静态字符串到英语数字(字符串输入)
{
var englishNumber=新字典()
{
{"۰","0" }, {
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);
public static class Numbers
{
    public static string ChangeToEnglishNumber(this string text)
    {
        var englishNumbers = string.Empty;
        for (var i = 0; i < text.Length; i++)
        {
            if(char.IsNumber(text[i])) englishNumbers += char.GetNumericValue(text, i);
            else englishNumbers += text[i];
        }

        return englishNumbers;
    }
}
string test = "۱۰۳۶۷۵۱".ChangeToEnglishNumber(); // => 1036751
private static readonly string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
    private static readonly string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    public static string ToEnglishNumber(this string strNum)
    {
        string chash = strNum;
        for (int i = 0; i < 10; i++)
            chash = chash.Replace(pn[i], en[i]);
        return chash;
    }
    public static string ToEnglishNumber(this int intNum)
    {
        string chash = intNum.ToString();
        for (int i = 0; i < 10; i++)
            chash = chash.Replace(pn[i], en[i]);
        return chash;
    }
private string ToEnglishNumber(string strNum)
{
string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "٫" };
string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","." };
string chash = strNum;
for (int i = 0; i < 11; i++)
    chash = chash.Replace(pn[i], en[i]);
return chash;
}
    public static string ToEnglishNumber(string input)
    {

        var englishnumbers = new Dictionary<string, string>()
        {
            {"۰","0" }, {"۱","1" }, {"۲","2" }, {"۳","3" },{"۴","4" }, {"۵","5" },{"۶","6" }, {"۷","7" },{"۸","8" }, {"۹","9" },
            {"٠","0" }, {"١","1" }, {"٢","2" }, {"٣","3" },{"٤","4" }, {"٥","5" },{"٦","6" }, {"٧","7" },{"٨","8" }, {"٩","9" },

        };

        foreach (var numbers in englishnumbers)
            input = input.Replace(numbers.Key, numbers.Value);

        return input;
    }
public static string ChangeNumberToEnglishNumber(string value)
    {
        string result=string.Empty;
        foreach (char ch in value)
        {

            try
            {
                double convertedChar = char.GetNumericValue(ch);
                if (convertedChar >= 0 && convertedChar <= 9)
                {
                    result += convertedChar.ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    result += ch;
                }


            }
            catch (Exception e)
            {
                result += ch;
            }

        }

        return result;
    }
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;
     }
}
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));
      }
}
string result = "۱۰۳۶۷۵۱".PersianToEnglish();
public static class Utility
    {
        // '۰' = 1632
        // '0' = 48
        // ------------
        //  1632  => '۰'
        //- 1584
        //--------
        //   48   => '0'
        public static string GetEnglish(this string input)
        {
            char[] persianDigitsAscii = input.ToCharArray(); //{ 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641 };
            string output = "";
            for (int k = 0; k < persianDigitsAscii.Length; k++)
            {
                persianDigitsAscii[k] = (char) (persianDigitsAscii[k] - 1584);
                output += persianDigitsAscii[k];
            }

             return output;
        }
    }
static char[][] persianChars = new char[][]
    {
        "0123456789".ToCharArray(),"۰۱۲۳۴۵۶۷۸۹".ToCharArray()
    };
    static char[][] arabicChars = new char[][]
    {
        "0123456789".ToCharArray(),"٠١٢٣٤٥٦٧٨٩".ToCharArray()
    }; 
    public static string toPrevalentDigits(this string src)
    {
        if (string.IsNullOrEmpty(src)) return null;
        for (int x = 0; x <= 9; x++)
        {
            src = src.Replace(persianChars[1][x], persianChars[0][x]);
        }
        for (int x = 0; x <= 9; x++)
        {
            src = src.Replace(arabicChars[1][x], arabicChars[0][x]);
        }
        return src;
    } 
public static string Fa2En(string str)
{
  return str.Replace("۰", "0")
            .Replace("۱", "1")
            .Replace("۲", "2")
            .Replace("۳", "3")
            .Replace("۴", "4")
            .Replace("۵", "5")
            .Replace("۶", "6")
            .Replace("۷", "7")
            .Replace("۸", "8")
            .Replace("۹", "9");
}