最近,一位Windows用户向我们反映,在我们的应用程序中,日语(以及其他Unicode字符)在Windows下无法正确显示。他只能看到带有数字的方框。
我们使用Pango、Fontconfig/freetype并使用Cairo进行渲染。在Unix系统(即Linux和macOS)上,它可以完美地工作。然而,在Windows下,我们似乎无法使其正常工作。
我想这可能与Windows下字体回退/链接的工作方式有关,但我甚至不知道从哪里开始研究如何使其正常工作。
最近,一位Windows用户向我们反映,在我们的应用程序中,日语(以及其他Unicode字符)在Windows下无法正确显示。他只能看到带有数字的方框。
我们使用Pango、Fontconfig/freetype并使用Cairo进行渲染。在Unix系统(即Linux和macOS)上,它可以完美地工作。然而,在Windows下,我们似乎无法使其正常工作。
我想这可能与Windows下字体回退/链接的工作方式有关,但我甚至不知道从哪里开始研究如何使其正常工作。
Linux系统是以fontconfig和字体替换为基础构建的,因此在Linux下可用的字体都被精心筛选,以便在该场景下良好运行。
在其他系统中,很常见遇到一些字体做了愚蠢的事情,例如将字体设计者未绘制的所有字形映射到占位符号(通常是方形)。当fontconfig遇到这样的字体时,它不会使用其他字体的材料替换缺失的字形,因为该字体已经声明了用于显示这些码点的内容。
另一个常见情况是非拉丁字体提供了简单粗暴的拉丁字形,以便不能替换字体的软件仍然能够以英文显示错误。它们需要在fontconfig中具体规则,以促进字体的有用部分,而不是填充部分。