我的应用程序使用Pango、Cairo和GTK3显示字符串。其中一些字符串包含一些特殊字符,包括一个不在Unicode基本平面中的字符。在Linux上,这只是起作用,但在Windows上,它找不到特殊字符,而是显示未知字符框。
我使用Roboto作为文本,但它不包括这些字符。使用我在这里发现的一个技巧,我发现在Linux上,底层的fontconfig库会故障转移到Symbolica或STIX。
FC_DEBUG=4 pango视图-q-t"{character}"2>&1|grep-o’族:"[^"]+'|剪切-c 10-|尾部-n 1
我试过在Windows机器上安装这些字体,但没有什么乐趣。
我的Windows机器正在运行Mingw-w64,它附带了包含fontconfig文件的/etc/fonts
,但它们似乎没有做正确的事情。不幸的是,pango-view
似乎没有注意到那里的FC_DEBUG环境变量,所以我不知道它在做什么。
我如何告诉Windows上的fontconfig在哪里可以获得Roboto没有提供的代码点的字形?
更新:我已经将有问题的字符串的AttrFallback设置为True,以防Pango版本在Linux和Windows上对此有不同的处理。仍然没有运气。
我仍然不知道为什么这在Windows和Linux中的工作方式不同,但答案隐藏在Pango.FontDescription.set_family
文档中:
在pango的某些用法中。FontDescription,也可以在此字段中使用逗号分隔的家族名称列表。
当我在逗号分隔的列表中添加所需的回退字体时,它起到了作用。