Как преобразовать строку 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);
}