【问题标题】:How to find the default font for East Asian character in MacOS如何在 MacOS 中查找东亚字符的默认字体
【发布时间】:2019-11-17 14:32:18
【问题描述】:

在使用文本编辑应用程序时,选择一种字体(如“Menlo”)呈现字形,当所选字体不包含特殊字形时(如“????”,即为简单的中文glyph, "Menlo" 不包含它), 应用程序会为你选择一个字体来呈现它, 在 MacOS(Catalina) 中, 大约有 62 种字体 (STBaoliSC-Regular, STKaiti, STSong, PingFangSC-Regular... ) 包含这个字形“????”,我发现几乎每个文本编辑应用程序(vscode、sublime text、TextEdit)都使用相同的字体——“PingFangSC-Regular”,所以我考虑是不是每个字形都有它的自己的默认字体?如果是这样,我怎样才能得到字体名称?

【问题讨论】:

    标签: macos textedit nsfont


    【解决方案1】:

    这由“级联列表”处理。如果您想要默认列表,可以通过CTFontCopyDefaultCascadeListForLanguages 获得,基于每种字体:

    import CoreText
    let font = CTFontCreateWithName("Helvetica" as CFString, 12, nil)
    let descriptors = CTFontCopyDefaultCascadeListForLanguages(font, nil)! as! [CTFontDescriptor]
    

    如果你想查看列表,你可以这样做(Core Text 没有很好的与 Swift 的桥接):

    for descriptor in descriptors {
        let attributes = CTFontDescriptorCopyAttributes(descriptor) as! [String: Any]
        print(attributes[kCTFontNameAttribute as String]!)
    }
    

    ==>

    LucidaGrande
    .AppleSymbolsFB
    GeezaPro
    NotoNastaliqUrdu
    Thonburi
    Kailasa
    PingFangSC-Regular
    PingFangTC-Regular
    AppleSDGothicNeo-Regular
    PingFangTC-Regular
    PingFangSC-Regular
    PingFangHK-Regular
    PingFangSC-Regular
    HiraginoSans-W3
    HiraginoSansGB-W3
    KohinoorBangla-Regular
    KohinoorDevanagari-Regular
    KohinoorGujarati-Regular
    MuktaMahee-Regular
    NotoSansKannada-Regular
    KhmerSangamMN
    LaoSangamMN
    MalayalamSangamMN
    NotoSansMyanmar-Regular
    NotoSansZawgyi-Regular
    NotoSansOriya
    SinhalaSangamMN
    TamilSangamMN
    KohinoorTelugu-Regular
    NotoSansArmenian-Regular
    EuphemiaUCAS
    Menlo-Regular
    STIXGeneral-Regular
    Galvji
    Kefa-Regular
    .NotoSansUniversal
    AppleColorEmoji
    

    PingFangSC-Regular 是列表中的第一个东亚字体,因此它将被选为替代 Helvetica 的字体。它也是 Lucida Grande 和 Helvetica Neue 级联列表中的第一个东亚字体。它是一种直截了当,甚至无聊的字体。但是,如果你使用的是更不寻常的字体,比如 American Typewriter?好吧,那将被松提取代,它更轻一些。 Marker Felt 替换为 Kaiti,它在行程宽度上有更多的变化(尽管 IMO 用 Kaiti Black 代替它会好得多,而不是 Regular)。我不知道任何内置亚洲字体与可用的拉丁字体一样“有趣”,但如果你有一个,你可以自定义级联列表来选择它(在 Mac 上使用 NSFontDescriptor,在 iOS 上使用 UIFontDescriptor )。

    如果您想了解有关级联列表的更多详细信息,请观看 WWDC 2018 视频,Creating Apps for a Global Audience.

    【讨论】:

    • 完美答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2019-12-19
    • 2010-11-17
    相关资源
    最近更新 更多