从 Fedora 22 开始,系统自带思源黑体(Source Han Sans),不再使用文泉驿正黑或微米黑(但仍然可以通过 dnf 在线安装)。思源黑体采用 OTF 字体格式(Open Type Font),技术上是 TrueType 字体的更为先进的升级版。但经过反复测试发现,Java 对 OTF 字体的支持似乎存在问题。尽管 Oracle 官方文档上说从 Java 7 开始已经能够支持 OTF 字体,比如 createFont 等方法仍然可以用 TRUETYPE_FONT 等参数提供对 OTF 字体的支持,但思源黑体在 Java 程序中显示汉字会出现方块,特别是简体中文语言环境下,字体看似使用的思源黑体台湾香港地区繁体版本,并没有使用简体中文版本,一些字显示不出来,以方块代替了。在没有多余精力去研究字体问题的情况下,目前猜测是因为思源字体以 OTF 格式发布并且内部还存在 Hinting 信息的问题导致 Java 识别存在问题,另外字体的语言编码可能也是个问题。暂时的替代方法是,最好使用不带 Hinting 信息的 TTF 字体,比如 XHei、明兰等社区制作的字体(不含 Hinting 信息),另外建议删除思源黑体软件包安装时自带的 fontconfig 配置,然后直接修改 fontconfig 中的 65-nonlatin.conf 等文件,自定义你所使用的替代字体的匹配优先级等等。 |