Pango / Cairo / Fontconfig:在Windows中使Unicode字体回退/链接正常工作

最近,一个Windows用户让我们意识到,在我们的应用程序中的日语(和其他unicode)字符不能正确显示在Windows下。 他只是用数字来代替箱子。

我们正在使用Pango,Fontconfig / freetype和开罗渲染。 在Unix(也就是Linux和MacOS)中,它完美的工作。 但是,在Windows下,我们似乎无法使其工作。

我想这与Windows下字体回退/链接的工作方式有关,但我不知道从哪里开始正确地开始工作。

Linux系统是建立在fontconfig和字体替换的基础之上的,所以Linux下可用的字体可以在这种情况下很好地运行。

在其他系统中遇到这样的字体是很常见的:字体设计器还没有将所有的字形映射到占位符(通常是方形的)。 当fontconfig遇到这样的字体时,它将不会用其他字体的材质来替换缺失的字形,因为字体已经声明了一些要显示的代码点。

另一个常见的情况是非拉丁字体运送快速和肮脏的拉丁字形,所以不能替代字体的软件仍然显示英文错误。 它们在fontconfig中需要特定的规则来提升字体的有用部分,而不是填充字体。

事实证明,这个问题比预期的要简单,但在任何地方都没有很好的记录。 Fontconfig需要它的配置文件(fonts.conf和conf.d下的辅助配置)。 在Linux中,这绝不是一个问题,因为大多数(如果不是全部的话)发行版默认使用fontconfig,所以即使一个人弄糟了,仍然有一个系统配置可以重新使用。

相比之下,windows通常不使用fontconfig,所以除非devs发布一组fontconfig配置文件,否则它最多只能装载指定的字体,但是不能做任何事情(比如字体回退)。

解决方法是发送一个“fonts”文件夹,其中包含至少fonts.conf以及conf.d中的任何适当的定义,通常文件夹应该与fontconfig库位于同一个文件夹中。 (如果这不起作用,你可以设置FONTCONFIG_PATH为“。”)

最后,除非你真的对配置做了任何特殊的修改,否则你可以复制/ etc /中的默认配置文件来发布你的应用。