44

次のように変数に保存されているペルシャ数字を変更したい:

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

string Value="1036751";

これを行うには、文化情報などの簡単な方法を使用するにはどうすればよいですか?

私のサンプルコードは次のとおりです。

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

<= だからそれはでき
ない

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;
}
4

17 に答える 17

20

USE カルチャ数値を任意の言語から任意の言語に変換するには

機能:

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;
}

関数の使用方法:

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);

結果:

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

r2:"00112233445566778899"

r3:"۰۱۲۳۴۵۶۷۸۹"

于 2016-08-31T14:38:47.137 に答える
11

たとえば Int32.Parse() を正しいカルチャ指定子とともに使用して、最初にそれらを解析する必要があります。単純な整数として取得したら、正しいカルチャ指定子を使用して ToString() を呼び出すだけです。

別の解決策は、文字列を 1 文字ずつ調べて、ペルシャ数字の文字を対応する(西) アラビア数字に置き換えることです。必要に応じて、他の文字をそのまま保持できます。

文字列に実際に数値が含まれている場合は、整数の解析方法を使用する必要があります。単なる数字ではなく、実際に電話番号、シリアル番号などである場合は、代わりに置換アルゴリズムを使用する必要がある場合があります。

于 2013-08-20T16:57:58.990 に答える
7

そのように手動で変換できます

    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 配列に追加する必要があります。

于 2013-08-20T17:27:00.677 に答える
1
    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;
    }
于 2018-05-19T04:23:41.480 に答える