Горе с неопознанной escape-последовательностью с символами Юникода - PullRequest
0 голосов
/ 05 октября 2011

Я пишу программу. Часть этой программы включает чтение значения Unicode из файла XML и отображение символа на экране.

Теперь, когда я сделал это так:

tbTester.Text = "\u597D";

Работало нормально (tbTester - текстовое поле Winforms). Но с другой ситуацией, в основном мне нужно было изменить строку, чтобы иметь '\ u' и затем значение. Как это:

szOut = szOut + "\u"+k.UnicodeID + " ";

Для меня это не так уж и отличается. Только теперь он говорит мне, что "\ u" - это нераспознанная escape-последовательность.

Теперь я посмотрел на эту проблему, и двойная косая черта или символ «@» вылечили эту конкретную ситуацию, только теперь текстовое поле содержит «\ u430B» (или любой другой), а не символ, который выводился в первом из моих примеров.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Попробуйте

szOut = szOut + (char)k.UnicodeID;

Вам больше не нужно экранировать символ, поскольку он не находится в буквальной строке.Вам просто нужно преобразовать число в его эквивилант.

2 голосов
/ 05 октября 2011

Когда вы компилируете код, как в первом примере, скомпилированный код CIL на самом деле содержит не escape-последовательность, а сам символ. А поскольку \u само по себе недопустимо, это вызывает ошибку, которую вы получаете.

Если у вас есть кодовая точка Unicode в качестве целого числа, вы можете преобразовать ее в символ просто путем приведения. А оператор + позаботится обо всем остальном:

szOut = szOut + (char)k.UnicodeID + " ";

Хотя я предпочитаю string.Format() в таких случаях:

szOut = string.Format("{0}{1} ", szOut, (char)k.UnicodeID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...