Unicode рендеринг в C # - PullRequest
       7

Unicode рендеринг в C #

1 голос
/ 22 января 2010

У меня есть приложение на C #, в котором я храню значение кодовой точки символа Unicode, которое будет отображаться, когда пользователь правильно сопоставляет определенную обычную строку.

Дело в том, что при прямом сохранении значения кодовой точки (скажем, \ uFB80) приложение работает нормально. Но когда я читаю из файла или переменной, которая имеет только кодовую точку (в данном случае FB80), я получаю много неправильно отображаемых символов. Изменение сохраненного значения на \ uFB80 или попытка добавить «\ u» перед значением приводит к тому, что система считывает его как \ uFB80, что приводит к другому неверному результату.

Как обойти это?

XmlTextReader reader = new XmlTextReader("file.xml"); 
reader.Read(); 
reader.MoveToAttribute("glyph"); 

glyph = reader.Value; 
// glyph will be "FB80" 
// if xml file had "\uFB80", glyph will be "\\uFB80" 

richTextBox1.SelectionFont = "QCF_P604"; 
richTextBox1.AppendText(glyph); 

1 Ответ

0 голосов
/ 24 января 2010

Дорогой Джалал, поскольку я недооцениваю, у вас есть строка (в файле или внутри TextBox), когда вы анализируете строку из ящика, все идет хорошо, но когда вы пытаетесь прочитать файл, с которым вы столкнулись с проблемой.

У вас есть XML-документ, в котором вы нашли символьный символ. и каждый элемент этого XML (например, Item) имеет некоторый атрибут, такой как Glyph. (форма персонажа)

Если вы хотите отобразить только форму персонажа, вы ошибаетесь. Единственное, что вам нужно сделать, - это написать простой метод, который дает десятичное (или шестнадцатеричное) значение символа и возвращает символ.

Возвращенный символ будет отображаться везде как один символ. поэтому я настоятельно рекомендую изменить метод (это ускорит ваше приложение).

// het a hex and return char (you can give it a large string or a single hexcode
// (hex without U just HexCode)
public static char ConvertHexToUnicode(string hexCode)
    {
        if (hexCode != string.Empty)
            return ((char)int.Parse(hexCode, NumberStyles.AllowHexSpecifier));

        char empty = new char();
        return empty;
    }//end

и для десятичного значения используйте следующий код

 public static char ConvertDecimalToChar(Int64 decimalValue)
    {
        return ((char)int.Parse(decimalValue.ToString(), NumberStyles.Integer));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...