如何找到提供特定 Unicode 字形的字体?

mat*_*tdm 3 fonts unicode

在我从 F22 升级的 Feodora 23 系统上,U1F32D 符号在终端中显示得很好,但在我从头安装的系统上,我得到了带数字的占位符。我刚刚检查了一下,我在系统上有大约 60 个字体包不起作用,而在它起作用的地方有 200 多个。如果不手动检查每个字体,有没有办法确定我需要添加哪种字体?

meu*_*euh 5

这个答案已经谢天谢地了一个新的选择被取代的fc-list命令,:charset=1F32D给出在这里,并且可以从91年2月11日的版本(2014,12月下旬)。感谢@scruss 提供此更新。


保留这个答案的整个历史。

如果你发出命令

fc-list -v
Run Code Online (Sandbox Code Playgroud)

它应该为每种字体列出charset属性,该属性是字体中存在的字符代码的位掩码。例如,对于像fc-list -v 'Courier 10 Pitch'它这样有线条的简单字体:

charset: 
0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
0001: 00000000 00020000 000c0006 61000003 00040000 00000000 00000000 00000000
...
00fb: 00000006 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

取第一列中的十六进制数,就像最后一行一样00fb,将其左移 8 位。它是 unicode 值的开始。位掩码 00000006 表示代码 1 和 2 ( 6 = 2+4 = 1<<1 | 1<<2)存在一个字形,您将其添加到第一列以获得00fb0100fb02。(例如,这些字形是拉丁文小连字 fi。)

因此,如果U1F32D您需要 grep01f3:并查找2d在该行中的 index 处设置的位,即00000000 00002000 ...可能!)。注意这里的 0 只显示 2 的位置。实际值可以是任何十六进制数字。(grep 模式可能01f3: ........ ....[2367abef])。前面的file:条目应该引导您到包 (use rpm -qf filename)。

但我相信一定有更好的方法来搜索字形。

  • 这个答案给出 *[fc-list ':charset=&lt;hex_code1&gt; &lt;hex_code2&gt;'](https://unix.stackexchange.com/questions/162305/find-the-best-font-for-rendering-a-codepoint /393740#393740)*。果然,我的系统上的 `fc-list ':charset=1F32D'` 返回 Noto Color Emoji、Segoe UI Emoji 和 Segoe UI Symbol。 (2认同)