Как преобразовать строку unicode в int в С#?

0 Navid_pdp11 [2017-03-04 16:59:00]

У меня есть строка из источника, который является цифровым номером юникода следующим образом:

n = 117 => 117

теперь я хочу преобразовать эту строку в int. но когда я пытаюсь использовать Convert.ToInt, я получаю это исключение. Как я могу решить эту проблему?

c# .net unicode


2 ответа


1 Решение Night walker [2017-03-04 17:27:00]

    Int32 value = 0;
    if (Int32.TryParse(String.Join(String.Empty, "۱۱۷".Select(Char.GetNumericValue)), out value))
    {
        Console.WriteLine(value);
        //....
    }

1 aloisdg [2017-03-04 17:35:00]

Мы будем использовать метод GetNumericValue(), чтобы преобразовать каждый символ в число. Документация понятна:

Преобразует указанный числовой символ Unicode в число с плавающей запятой с двойной точностью.

демонстрация

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {   
        Console.WriteLine(ParseNumeric("۱۱۷"));
    }


    public static int ParseNumeric(string input)
    {
        return int.Parse(string.Concat(input.Select(c =>
            "+-".Contains(c)
                ? c.ToString()
                : char.GetNumericValue(c).ToString())));
    }
}

И если вы хотите поддерживать double, замените int на double и добавьте a . в строке перед Contains().

Если вы предпочитаете использовать TryParse вместо базового Parse здесь:

public static bool TryParseNumeric(string input, out int numeric)
{
    return int.TryParse(string.Concat(input.Select(c =>
        "+-".Contains(c)
            ? c.ToString()
            : char.GetNumericValue(c).ToString())), out numeric);
}