Answers:
我发现了一个python库,fonttools(pypi),可以使用一些python脚本来完成此工作。
这是一个简单的脚本,列出了所有已指定字形的字体:
#!/usr/bin/env python3
from fontTools.ttLib import TTFont
import sys
char = int(sys.argv[1], base=0)
print("Looking for U+%X (%c)" % (char, chr(char)))
for arg in sys.argv[2:]:
try:
font = TTFont(arg)
for cmap in font['cmap'].tables:
if cmap.isUnicode():
if char in cmap.cmap:
print("Found in", arg)
break
except Exception as e:
print("Failed to read", arg)
print(e)
第一个参数是代码点(十进制或带有0x的六进制),其余为要查找的字体文件。
我没有试图使它适用于.ttc
文件的麻烦(它在某处需要一些额外的参数)。
注意:我首先尝试使用otfinfo工具,但仅获得基本的多语言平面字符(<= U + FFFF)。python脚本可以找到扩展平面字符。
otfinfo看起来很有希望:
-u, --unicode
Print each Unicode code point supported by the font, followed by
the glyph number representing that code point (and, if present,
the name of the corresponding glyph).
例如,DejaVuSans-Bold知道fl连字(fl):
$ otfinfo -u /usr/share/fonts/TTF/DejaVuSans-Bold.ttf |grep ^uniFB02
uniFB02 4899 fl
-u
选项未出现在中--help
,但似乎仍然存在。但是(至少在Debian 2.105构建中)它似乎仅列出基本平面(最多U + FFFF)。该-g
选项知道扩展平面,但不适用于所有字体。