在C#Sinhala unicode字体渲染问题中打印unicode字体

时间:2017-02-14 08:33:40

标签: c# unicode printing utf-8 rendering

private void button1_Click(object sender, EventArgs e)
    {

        string str = "අම්මා";
        byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);
        String productLine = Encoding.UTF8.GetString(utf8Bytes);

        PrintDocument p = new PrintDocument();

        p.PrintPage += delegate(object sender1, PrintPageEventArgs e1)
        {
            e1.Graphics.DrawString(productLine, new Font("Iskoola Pota", 18), new SolidBrush(Color.Black), new RectangleF(0, 0, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));

        };
        try
        {
            p.Print();
        }
        catch (Exception ex)
        {
            throw new Exception("Exception Occured While Printing", ex);
        }
    }

此代码有效,但我的文字是“අම්මා”,但它显示为අ්මමා“,所以请帮助我以正确的方式显示。” Iskoola Pota“是Unicode字体

2 个答案:

答案 0 :(得分:0)

UTF-8不是unicode。在源代码中声明字符串时,这是unicode。在你的情况下,删除短声乐的变音符号在转换过程中会丢失。但更糟糕的事情可能发生,例如, Unicode Conversion in c#

为什么选择通过UTF-8?怎么样简单

e1.Graphics.DrawString(str, ...

另外:你检查过你的“School Book”字体是否正常,即可以显示一个无人的mම්,例如在Word中使用该字体?

答案 1 :(得分:0)

使用TextRenderer.DrawText代替Graphics.DrawString

TextRenderer.DrawText(e1.Graphics, "අම්මා", font, rectangle, Color.Black);