【问题标题】:C# Graphics.DrawString not rendering special characters?C# Graphics.DrawString 不呈现特殊字符?
【发布时间】:2025-12-05 20:45:02
【问题描述】:

我正在尝试将一些任意文本写入自定义控件。
我的代码有效,但是当我尝试绘制诸如 ü 之类的字符时,它会在字符所在的位置显示一个空方块。
我需要这个才能工作,因为我打算支持本地化。
我已经检查过了,并且 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));

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: c# graphics special-characters drawstring


    【解决方案1】:

    如果您使用的字体不包含字形,您会看到一个矩形。你知道事实并非如此,Tahoma 肯定有 ü。这意味着真正的问题是您没有正确地真实文件。

    您需要了解文件中的文本是如何编码的。您知道它不是 UTF8,这是 StreamReader 的默认设置。你的下一个猜测可能应该是:

            var sr = new StreamReader(path, Encoding.Default);
            // Read file...
    

    【讨论】:

    • 来,吃饼干!有效。有趣的是,char 的整数值比我没有指定编码时的值高 0xFF01。
    【解决方案2】:

    确保字体支持字符(使用charmap或其他)并使用unicode。

    例如:\u00FC 应该是你要找的角色

    以 Unicode 格式读取文件:

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

    【讨论】:

    • 谢谢,硬编码时有效!但是,我正在从外部文件中加载我的字符串,并且无法像那样逃脱。
    • 已编辑答案,不太确定以 unicode 格式读取是否有效,但应该可以。
    • 不,没用。不用担心,反正现在修好了。 Encoding.Default 有效(:
    最近更新 更多