Преобразовать шестнадцатеричный символ Unicode в его визуальное представление - PullRequest
8 голосов
/ 03 июля 2011

Я пытаюсь создать программу на C #, которая переводит символы Юникода из шестнадцатеричного формата в один символ, и у меня возникла проблема.Это мой код:

Это работает:

char e = Convert.ToChar("\u0066"); 

Однако это не работает:

Console.WriteLine("enter unicode format character (for example \\u0066)");
string s = Console.ReadLine();
Console.WriteLine("you entered (for example f)");
char c = Convert.ToChar(s); 

Поскольку (Convert.ToChar("\\u0066")) выдает ошибку:

Длина строки должна быть ровно один символ

У кого-нибудь есть идеи, как это сделать?

Ответы [ 2 ]

6 голосов
/ 03 июля 2011

int.Parse не нравится префикс "\ u", но если вы проверили сначала, чтобы убедиться, что он есть, вы можете использовать

char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);

Это удаляет первые два символа из входной строки и анализирует оставшийся текст.

Чтобы убедиться в правильности последовательности, попробуйте следующее:

Regex reg = new Regex(@"^\\u([0-9A-Fa-f]{4})$");
if( reg.IsMatch(s) )
{
  char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);
}
else
{
  // Error
}
0 голосов
/ 03 июля 2011
Convert.ToChar("\u0066");

Это односимвольная строка во время выполнения, потому что компилятор обработал последовательность обратной косой черты.

Остальная часть вашего кода работает с шестью символьными строками { '\\', 'u', '0', '0', '6', '6' }, которые Convert.ToChar не может обработать.

Попробуйте char.Parse (или, возможно, Int16.Parse(s, NumberStyles.AllowHexSpecifier) с последующим приведением к char).

...