C # Graphics.DrawString не рендеринг специальных символов? - PullRequest
2 голосов
/ 18 августа 2010

Я пытаюсь записать произвольный текст в пользовательский элемент управления.
Мой код работает, но когда я пытаюсь нарисовать такие символы, как ü, он отображает пустой квадрат, где будет находиться символ.
Мне нужно, чтобы это работало, так как я намереваюсь поддерживать локализации.
Я уже проверил, и у Tahoma есть необходимые символы. Мой код ниже:

string _Label = "Zurück";
Font labelFont = new Font("Tahoma", 9, FontStyle.Bold);
SizeF labelSize = e.Graphics.MeasureString(_Label, labelFont);
this.Width = (int)(labelSize.Width + this.Padding.Horizontal);
e.Graphics.DrawString(_Label, labelFont, Brushes.White, new PointF(this.Padding.Left, this.Padding.Top));

Кто-нибудь знает, как это исправить?

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

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

Вам необходимо выяснить, как кодируется текст в файле. Вы знаете, что это не UTF8, это по умолчанию для StreamReader. Ваше следующее предположение, вероятно, должно быть:

        var sr = new StreamReader(path, Encoding.Default);
        // Read file...
0 голосов
/ 18 августа 2010

Обеспечивает, чтобы шрифт поддерживал символ (используйте charmap или что-то еще) и использовал Unicode.

Пример: \ u00FC должен быть искомым символом

Чтение в файлах как Unicode:

StreamReader UnicodeFileRead new StreamReader(input, System.Text.Encoding.Unicode);
...