為一個字符正常顯示我遍歷了macOS系統(tǒng)的所有字體ttf(含代碼)

本文原文:為一個字符正常顯示我遍歷了macOS系統(tǒng)的所有字體ttf(含代碼)

近期再做一個簡體繁體轉(zhuǎn)換APP,然而發(fā)現(xiàn)有些字體無法顯示,具體情況如下:

簡體繁體轉(zhuǎn)換古字查guzicha

為了解決這個問題,我在編寫python程序時也遇到過,解決方法非常簡單找個大點的字庫就可以茅姜。然而這一次卻沒有成功,找了好幾個超大字庫都無法正常顯示月匣。無法顯示漢字情況如下:

字符:
UniCode編碼:U+e816


guzicha.com

雖然app無法正常顯示钻洒,但是我電腦和xcode都可以顯示正常,如下圖:

Jietu20190807-232417@2x.jpg

上面情況困擾我2天了锄开,后來突然想到素标。既然macOS系統(tǒng)可以顯示,那么肯定證明macOS系統(tǒng)已經(jīng)正常安裝了可以使用的字體萍悴。于是一個瘋狂的想法浮現(xiàn)在我腦海头遭,也許3步就可以找到自己需要的字體

    1. 找到所有macOS所有字體文件
    1. 挨個比對包含e816編碼ttf文件
    1. 在app里面試用,看看能否正常顯示

想法有了癣诱,我們就開始放手做了计维。第一步查找所有ttf文件,這個非常簡單撕予,用find命令就搞定了

sudo find  / -name  "*.ttf"

上一個命令鲫惶,我就找到了2948個文件,如下圖:


guzicha.com

第二步实抡,寫python代碼逐個比對

from __future__ import print_function, division, absolute_import
from fontTools.ttLib import TTFont as t1
from fontTools.pens.basePen import BasePen
from reportlab.graphics.shapes import Path
import json
import os
import os.path


'''
查找包含 e816


from lookup_mac import *
s_str='e816'
txtPath='/Users/cf/Documents/所有ttf文件.txt'
oklist,errorlist=op_txt(txtPath,s_str)
oklist


'''
'''
-1 不是ttf
-2 沒有找到
-3 路徑不對
-4 可能不是ttf欠母,人工跳過
'''
import os
def op_txt(txtPath,s_str):
    oklist=[]
    errorlist=[]
    for line in open(txtPath):
        print(line)
        filePath=line.replace('\n','')
        filePath=filePath.replace('\r','')
        if not os.path.isfile(filePath) :
            errorlist.append((-3,filePath,'','can not find file'))
            continue
        if '/Users/cf/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks/' in filePath:
            errorlist.append((-4,filePath,'','can not find file'))
            continue
        ret,p1,p2,p3=op_onefile(filePath,s_str)
        if ret ==1:
            print('ok=====:',ret,p1,p2,p3)
            oklist.append((ret,p1,p2,p3))
            continue
        if ret ==-1:
            errorlist.append((ret,p1,p2,p3))

    return oklist,errorlist



def op_onefile(filePath,s_str):
    #check is ttf
    ret,p1,p2=check_ttf(filePath)
    if ret <0:return ret,p1,p2,filePath
    
    fileName=p1
    font = t1(filePath)
    glyphNames = font.getGlyphNames()
    sIndex=0
    for fname in glyphNames:
        fname_low=fname.lower()
        if s_str in fname_low:
            return 1,sIndex,fname,filePath
        sIndex=sIndex+1
    return -2,'','not found',filePath




def check_ttf(filePath):
    
    fileName=filePath.split('/')[-1].lower()
    if ".ttf" not in fileName:
        return -1,filePath,'not ttf'

    return 1,fileName,'ok'



運行測試:

from lookup_mac import *
s_str='e816'
txtPath='/Users/cf/Documents/所有ttf文件.txt'
oklist,errorlist=op_txt(txtPath,s_str)
oklist

運行結(jié)果

一共有個75個文件符合需求


guzicha.com

我隨便找個了個fangsong.ttf,一測試就成功了澜术。通過輸出結(jié)果才發(fā)現(xiàn)艺蝴,原來花園字體和全宋體沒有成功,主要是unicode編碼前面有的是u2,uni2造成的鸟废。

最終效果

Jietu20190807-235243@2x.jpg

往期精彩

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盒延,隨后出現(xiàn)的幾起案子缩擂,更是在濱河造成了極大的恐慌,老刑警劉巖添寺,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胯盯,死亡現(xiàn)場離奇詭異,居然都是意外死亡计露,警方通過查閱死者的電腦和手機博脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門憎乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叉趣,你說我怎么就攤上這事泞边。” “怎么了疗杉?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵阵谚,是天一觀的道長。 經(jīng)常有香客問我烟具,道長梢什,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任朝聋,我火速辦了婚禮嗡午,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玖翅。我一直安慰自己翼馆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布金度。 她就那樣靜靜地躺著,像睡著了一般严沥。 火紅的嫁衣襯著肌膚如雪猜极。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天消玄,我揣著相機與錄音跟伏,去河邊找鬼。 笑死翩瓜,一個胖子當(dāng)著我的面吹牛受扳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兔跌,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼勘高,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坟桅?” 一聲冷哼從身側(cè)響起华望,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仅乓,沒想到半個月后赖舟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡夸楣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年宾抓,在試婚紗的時候發(fā)現(xiàn)自己被綠了子漩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡石洗,死狀恐怖幢泼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劲腿,我是刑警寧澤旭绒,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站焦人,受9級特大地震影響挥吵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜花椭,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一忽匈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矿辽,春花似錦丹允、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宾娜,卻和暖如春批狐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背前塔。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工嚣艇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人华弓。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓食零,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寂屏。 傳聞我的和親對象是個殘疾皇子贰谣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 字符集和編碼簡介 在編程中常常可以見到各種字符集和編碼凑保,包括ASCII,MBCS,Unicode等字符集冈爹。確切的說...
    蘭山小亭閱讀 8,456評論 0 13
  • 1 概述 最近項目中要添加表情包聊天的功能(文本和表情包要混合在一起),最直接的解決方案應(yīng)該就是圖文混排欧引,對于這個...
    小蕓論閱讀 8,442評論 0 3
  • 去年十月份改論文時频伤,用matplotlib做圖,生成pdf芝此,插入到word文檔中憋肖。但是需要把整個字體都嵌入到pdf...
    figs閱讀 7,080評論 0 5
  • 我每天熬夜有的時候會很想睡因痛,這個時候就會逼迫自己不睡覺,一些時候我在看書一些時候我在打游戲岸更,看書當(dāng)然是大多數(shù)時間鸵膏。...
    真抱歉我是個俗人閱讀 91評論 0 1
  • 極端: 1)事物發(fā)展所達頂點谭企。2)達到極點的。3)事物發(fā)展的端點狀態(tài)评肆,兩個最高峰债查,兩個互為對立的方面。4) 非常瓜挽。...
    杜兜兜兜兜閱讀 206評論 2 3