一尘不染

找出给定字体支持哪些字符

linux

如何在Linux上从TrueType或嵌入式OpenType字体中提取受支持的Unicode字符列表?

我是否可以使用工具或库来处理.ttf或.eot文件并构建字体提供的代码点列表(例如U + 0123,U + 1234等)?


阅读 315

收藏
2020-06-02

共1个答案

一尘不染

这是使用FontTools模块的方法(您可以使用来安装该模块pip install fonttools):

#!/usr/bin/env python
from itertools import chain
import sys

from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode

ttf = TTFont(sys.argv[1], 0, verbose=0, allowVID=0,
                ignoreDecompileErrors=True,
                fontNumber=-1)

chars = chain.from_iterable([y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables)
print(list(chars))

# Use this for just checking if the font contains the codepoint given as
# second argument:
#char = int(sys.argv[2], 0)
#print(Unicode[char])
#print(char in (x[0] for x in chars))

ttf.close()

该脚本将字体路径作为参数:

python checkfont.py /path/to/font.ttf
2020-06-02