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

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

摄影:产品经理下厨: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}】这个汉字')
目录
相关文章
|
图形学 Android开发 iOS开发
|
人工智能 Java
通过okhttp调用SSE流式接口,并将消息返回给客户端
通过okhttp调用SSE流式接口,并将消息返回给客户端
|
数据采集 大数据 Python
FFmpeg 在爬虫中的应用案例:流数据解码详解
在大数据背景下,网络爬虫与FFmpeg结合,高效采集小红书短视频。需准备FFmpeg、Python及库如Requests和BeautifulSoup。通过设置User-Agent、Cookie及代理IP增强隐蔽性,解析HTML提取视频链接,利用FFmpeg下载并解码视频流。示例代码展示完整流程,强调代理IP对避免封禁的关键作用,助你掌握视频数据采集技巧。
272 7
FFmpeg 在爬虫中的应用案例:流数据解码详解
|
11月前
|
存储 IDE 开发工具
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
629 0
|
存储 API
Elasticsearch快照备份与恢复 - 蓝易云
以上步骤可以帮助你在Elasticsearch中实现快照备份和恢复。注意,这些操作可能需要特定的权限和配置,所以在进行操作前,确保你具备足够的权限并已正确配置Elasticsearch。
256 0
|
编解码 测试技术 Python
【Python】已解决:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not i
【Python】已解决:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not i
2686 1
|
Windows
Multisim 14直流稳压电源的设计
Multisim 14直流稳压电源的设计
312 1
|
文字识别 PyTorch 算法框架/工具
【Python】已解决:Python正确安装文字识别库EasyOCR
【Python】已解决:Python正确安装文字识别库EasyOCR
2457 0
|
编译器 C语言 C++
C/C++编译优化技巧:预编译头文件(PCH)使用方法
C/C++编译优化技巧:预编译头文件(PCH)使用方法
1358 1
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 置环境变量 export命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 置环境变量 export命令 使用指南
312 0