的Unicode字形不窗体
问题:爪哇脚本(使用Google's Noto Sans Javanese font)渲染和 “组合拳” 正确的HTML,但不在Windows窗体应用程序(C#.NET,Visual Studio的2017)。的Unicode字形不窗体
编辑:我的电脑使用Windows 7,64位。
Noto Sans Javanese direct download link (.zip)
使用的字形
有很多情况表明,字形不正确地进行组合,但这里我用一个例子:
- 爪哇LETTER NA ,U + A9A4,#43428;
- 爪哇曼谷,U + A9C0,#43456;
- JAVANESE LETTER TA,U + A9A0,#43424;
- JAVANESE VELLE SIGN 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#结果:
问题
- 这种行为的原因是什么?有人可以解释吗?
- 我应该怎样才能使Java脚本在Windows Form Application上正确地“结合”?
非常感谢!
我收到了很少的选项和见解来帮助解决此问题。显然,这是只有在Windows 7上
Windows窗体的问题到目前为止,我的选择是:
- 切换到WPF应用程序(最好的选择,在我看来)
- 使用WPF Composite Control Windows内部形成
- 使用第三方库呈现为位图,例如:HarfBuzz
这里有来源,信用去给所有的作者:
- cheong00张贴在a MSDN Thread一个很好的解释:
由于Win7 has Unicode 5.1 support only和the character \uA9A4 falls in Unicode 5.2 range中,GDI +的文本渲染功能可能无法正确处理字形提示。 (我不是国际化问题的专家,所以不知道是否需要特殊字形暗示支持)
由于IE等网页浏览器,如Chrome和Firefox都带有自己的字体渲染引擎,它们是不受GDI +渲染限制。
顺便说一句,也测试设置“UseCompatibleTextRendering”为true也没有帮助。
另一方面,WPF窗体确实呈现文本。因此请考虑将其更改为WPF应用程序,或者用WinForm hosted WPF controls替换必要的控件。
- u/GoogleBingLady张贴在a Reddit thread见识:(定位&重排序双向性,基于上下文的整形,连字,)
字体成形是一个非常非常复杂的话题。尽管我很惊讶,但Windows Forms可能不支持字体整形。
解决方法是使用类似HarfBuzz的库,将结果呈现为位图,然后显示该位图。详情请参阅http://behdad.org/text/。
事实上,你的问题是在这里描述第8页:http://www.panl10n.net/Presentations/Cambodia/Pema/LocalizationofLinux(Bhutan).pdf
的Windows 7不支持爪哇整形。在Windows 8.1中添加了对Java的支持。
@downvoter:为什么?这不是一个有效的问题吗? – topher
这可能是一个有效的问题,如果它是一些奇怪的渲染怪癖,需要特别照顾,所以我会高兴地祝福它,但它也可能是Windows窗体中的一个简单缺陷。我建议你也把它报告给微软。 – Sander
@Sander谢谢!我只是[MSDN上的一个线程](https://social.msdn.microsoft.com/Forums/en-US/33fb4f0c-36a2-411a-97ba-6c0572badd10/unicode-glyphs-not-combined-properly-on- windows-forms?forum = netfxbcl) – topher