部件檢索辭典20210713

如果不是要在部件检索的网页里直接实现的话,可以参考这个看看

import unicodedata
import os
import sys
from fontTools import ttLib

fonts = []

for root,dirs,files in os.walk("/Users/usr/Library/Fonts/"):
    for file in files:
       if file.endswith(".ttf"): fonts.append(os.path.join(root,file))

FONT_SPECIFIER_NAME_ID = 4
FONT_SPECIFIER_FAMILY_ID = 1
def shortName( font ):
    name = ""
    family = ""
    for record in font['name'].names:
        if b'\x00' in record.string:
            name_str = record.string.decode('utf-16-be')
        else:
            name_str = record.string.decode('latin-1')
        if record.nameID == FONT_SPECIFIER_NAME_ID and not name:
            name = name_str
        elif record.nameID == FONT_SPECIFIER_FAMILY_ID and not family:
            family = name_str
        if name and family: break
    return name

from fontTools.ttLib import TTFont

def char_in_font(unicode_char, font):
    try:
        for cmap in font['cmap'].tables:
            if cmap.isUnicode():
                if ord(unicode_char) in cmap.cmap:
                    return True
    except:
        return False

def test(char):
    print(" * 正在检测支持【" + char + "】的字体......")
    array=[]
    for fontpath in fonts:
        font = TTFont(fontpath)
        if char_in_font(char, font):
            tt = ttLib.TTFont(fontpath)
            array.append(shortName(tt))
    return array

for uni in [b'\\u81c6',b'\\U00029aa3',b'\\U0003049a']:
    char=uni.decode('unicode-escape')
    print(test(uni.decode('unicode-escape')))
1 个赞