【发布时间】:2018-01-13 18:11:32
【问题描述】:
问题: Javanese 脚本(使用 Google's Noto Sans Javanese font)在 HTML 上正确渲染和“组合”,但在 Windows 窗体应用程序(C# .NET、Visual Studio 2017)上不 )。
编辑:我的电脑使用的是 Windows 7,64 位。
Noto Sans Javanese direct download link (.zip)
使用的字形
有很多情况表明字形没有正确组合,但这是我使用的一个示例:
- 爪哇字母 NA, U+A9A4, #43428;
- 爪哇邦孔,U+A9C0,#43456;
- 爪哇字母TA,U+A9A0,#43424;
- 爪哇元音符号 PEPET,U+A9BC,#43452;
Javanese Script Unicode Specification direct download link (.pdf)
正确/期望的行为
这些字形中的四个应该“组合”成一个字符
HTML 代码:
<html>
<head>
<meta charset="utf-8">
<style>
.javanese {
font-family: "Noto Sans Javanese";
font-size: 66px;
}
</style>
</head>
<body>
<div class="javanese">ꦤ꧀ꦠꦼ</div>
<div class="javanese">ꦤ꧀ꦠꦼ</div>
</body>
</html>
HTML 结果:
Windows 窗体 (C# .NET) 上的渲染不正确
我正在使用 Visual Studio 2017 社区,创建一个 Windows 窗体桌面应用程序。
标签组件使用“Noto Sans Javenese”字体。
C#代码:
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.label1.Text = "\uA9A4\uA9C0\uA9A0\uA9BC";
this.label2.Text = "ꦤ꧀ꦠꦼ"; // Copied from HTML
// this one is rendered correctly
// Thai character "ko kai" (U+0E01) and combining characters "mai tho" (U+0E49).
this.label3.Text = "\u0E01\u0E49\u0E49\u0E49\u0E49\u0E49\u0E49\u0E49\u0E49";
}
}
}
C# 结果:
问题
- 此行为的原因是什么?谁能解释一下?
- 我应该怎么做才能使 Javanese 脚本在 Windows 窗体应用程序上正确“组合”?
非常感谢!
【问题讨论】:
-
@downvoter:为什么?这不是一个有效的问题吗?
-
这可能是一个有效的问题,如果它是一些需要特别注意的奇怪的渲染怪癖,所以我很乐意支持它,但它也可能是 Windows 窗体中的一个简单缺陷。我建议你也向微软报告。
-
@Sander 谢谢!我刚刚做了a thread on MSDN
-
您能否提供有关您的设置的更多信息?我刚刚复制了您的项目并得到您描述为正确的输出:i.imgur.com/G7lxeeP.png ---(编辑添加:刚刚注意到您的屏幕截图看起来像是来自 Windows 7,这可能是不同的。要尝试的一件事是将标签上的 UseCompatibleTextRendering 属性设置为“true”。这将强制标签使用 GDI+ 文本渲染,这在旧版本的 Windows 上更好地支持高级脚本。)
-
@TimothyFries 感谢您重现我的问题。是的,我使用的是 Windows 7。我尝试将
UseCompatibleTextRendering设置为true,但结果仍然不正确,here's the screenshot。我同意你的观点,Win 7 可能是个问题..
标签: c# windows winforms unicode glyph