一日一技:如何判断某个汉字是不是在字体库中

简介: 一日一技:如何判断某个汉字是不是在字体库中

摄影:产品经理下厨:kingname

我们喜欢从网上下载各种各样的中文字体,但这些字体一般只设计了常用汉字,遇到生僻字时就会变成系统默认字体。如下图所示为方正静蕾简体,没有“龍鑨”两个汉字:

现在,我手上有10000个汉字,我如何快速确定哪些汉字在这个字体库中呢?

为了解决这个问题,我们需要安装 Python 的一个第三方库:fontTools

首先我们来安装它:

python3 -m pip install fonttools

然后,我们编写代码,读取字体库中的所有字体:

from fontTools.ttLib import TTFont
font = TTFont('方正静蕾体.ttf')
unicode_map = font['cmap'].tables[0].ttFont.getBestCmap()

这段代码获取的 unicode_map是一个字典,字典的 key 是这个字体库中所有字符的 unicode 码。所以,如果我们要检查某个汉字在不在这个字体库中,只需要检查汉字的 unicode 码在不在unicode_map中即可:

words = '一二龍三四'
for word in words:
    if ord(word) in unicode_map:
        print(f'字体库中有:【{word}】这个汉字')
    else:
        print(f'字体库没有:【{word}】这个汉字')

运行效果如下图所示:

对于守规矩的字体,这样写就足够了。但是有一些字体,他们明明没有某个汉字,却非要把这个汉字的 unicode 码添加到 unicode_map中,所以我们还可以再进一步检验:

glyf_map = font['glyf']
if len(glyf_map[unicode_map[ord(word)]].getCoordinates(0)[0]) == 0:
            print(f'字符:【{word}】确实不在字体库中')

完整的代码如下图所示:

from fontTools.ttLib import TTFont
font = TTFont('方正静蕾体.ttf')
unicode_map = font['cmap'].tables[0].ttFont.getBestCmap()
glyf_map = font['glyf']
words = '一二龍三四'
for word in words:
    if ord(word) in unicode_map and len(glyf_map[unicode_map[ord(word)]].getCoordinates(0)[0]) > 0:
        print(f'字体库中有:【{word}】这个汉字')
        continue
    print(f'字体库没有:【{word}】这个汉字')
目录
相关文章
用word快速将数字字体换成新罗马详细简单方法
用word快速将数字字体换成新罗马详细简单方法
3866 0
用word快速将数字字体换成新罗马详细简单方法
Qt实用技巧:实用掩码限制QLineEdit只能输入规定长度的数字、字母和字符
Qt实用技巧:实用掩码限制QLineEdit只能输入规定长度的数字、字母和字符
Qt实用技巧:实用掩码限制QLineEdit只能输入规定长度的数字、字母和字符
|
8天前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
9 1
|
1月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
27 0
|
4月前
|
JavaScript
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
js 判断字符串是否包含中文,判断字符串是否全是中文,判断字符是否为中文
241 0
|
Windows
ArcMap属性表汉字乱码的一种解决方法
本文介绍ArcMap软件打开图层的属性表后,出现字段中汉字乱码情况的解决方法~
304 1
ArcMap属性表汉字乱码的一种解决方法
|
存储 Unix 开发工具
[oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
[oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
161 0
 [oeasy]python0111_字型码_字符字型编码_点阵字库_ascii演化
运行可用:使用FreeType输出中文汉字点阵图形的源码
运行可用:使用FreeType输出中文汉字点阵图形的源码
235 0
运行可用:使用FreeType输出中文汉字点阵图形的源码
成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程
成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程
成功解决wps文档中输入英文单词出现对应英文单词下边红色波浪线(英文拼写自动检测)去掉或加上图文教程