2017-05-07 31 views
3

在Python中失蹤,當我使一個Unicode字符,例如一個帶有選定字體的中文字符,有時關於常用Unicode字符的字體不完整,並且無法呈現有問題的Unicode字符。在這些情況下,如果我稱之爲「打印」功能,則輸出通常看起來像一個方框,而不管底層unicode字符應該是什麼樣子。蟒蛇統一渲染:如何知道一個Unicode字符從字體

當然,一旦予打印Unicode字符,我可以查看輸出,然後確定所選擇的字體射門特定Unicode字符。但是,在我打印之前,有沒有辦法可以自動打印,而不必訴諸於我自己的人眼來確定字體是否包含在字體中?

我也想澄清,我知道,比其他人更完整的字體。我的問題不是我可以使用哪種字體,所以如果我打電話給「打印」,我通常會有一個合理的輸出。也請忽略我如何打印字符或如果我真的想打印字符的問題。我的問題很簡單,對於任何給定的字體,如何判斷字體中是否缺少unicode字符,而不使用任何依靠人爲判斷輸出的手動過程。

+0

OS可能有差別,您使用的是哪一個? –

+1

如何在打印電話時知道甚至使用哪種字體?標準輸出上的文本可能會發送到終端,文件,其他應用程序......簡而言之,如果沒有更多的限制,這個問題是無法解決的。 –

+0

我想你們都錯過了我的觀點。無論我是否或如何打印字符,我只想知道字符是否包含在字體中。 – MichM

回答

5

https://unix.stackexchange.com/questions/247108/how-to-find-out-which-unicode-codepoints-are-defined-in-a-ttf-file

總之,一個可以安裝fonttools包,與路徑的任何利益的.ttf字體文件提供它,併爲您如果感興趣的Unicode字符的長形式包含在字體文件的unicode映射表。

from fontTools.ttLib import TTFont 
font = TTFont(fontpath) # specify the path to the font in question 


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

然後調用char_in_font函數來檢查字體中是否包含unicode字符。

+0

通常我會抱怨只有鏈接的答案,但在這種情況下,它是另一個StackExchange站點的鏈接...並提供了摘要。 –

+0

@MarkRansom所以後來通過你的描述它不是鏈接而已;) – MichM

+0

是,也不是 - 通過自身的總結是不是真的足以解決方案代碼。附:祝賀你找到答案並回來告訴我們其他人,你可能有一天會拯救某人的培根。 –