如何判断哪些字体包含特定字符?

问题描述 投票:0回答:3

给定一个特定的 Unicode 字符,比方说吗,我如何迭代系统中安装的所有字体并列出包含该字符字形的字体?

c# .net fonts
3个回答
19
投票

我已经在 .NET 4.0 上对此进行了测试,您需要添加对 PresentationCore 的引用才能使字体和字体类型正常工作。另请检查 Fonts.GetFontFamilies 重载

using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Media;

class Program
{
    public static void Main(String[] args)
    {
        PrintFamiliesSupportingChar('a');
        Console.ReadLine();
        PrintFamiliesSupportingChar('â');
        Console.ReadLine();
        PrintFamiliesSupportingChar('嗎');
        Console.ReadLine();
    }

    private static void PrintFamiliesSupportingChar(char characterToCheck)
    {
        int count = 0;
        ICollection<FontFamily> fontFamilies = Fonts.GetFontFamilies(@"C:\Windows\Fonts\");
        ushort glyphIndex;
        int unicodeValue = Convert.ToUInt16(characterToCheck);
        GlyphTypeface glyph;
        string familyName;

        foreach (FontFamily family in fontFamilies)
        {
            var typefaces = family.GetTypefaces();
            foreach (Typeface typeface in typefaces)
            {
                typeface.TryGetGlyphTypeface(out glyph);
                if (glyph != null && glyph.CharacterToGlyphMap.TryGetValue(unicodeValue, out glyphIndex))
                {
                    family.FamilyNames.TryGetValue(XmlLanguage.GetLanguage("en-us"), out familyName);
                    Console.WriteLine(familyName + " supports ");
                    count++;
                    break;
                }
            }
        }
        Console.WriteLine();
        Console.WriteLine("Total {0} fonts support {1}", count, characterToCheck);
    }
}

2
投票

您可以使用 albatross 命令行工具(https://gitlab.com/islandoftex/albatross/;也包含在 texlive 或 miktex 等 tex 发行版中)。

如果运行

albatross 嗎
,您将获得包含该字符的所有字体的列表:

        __ __           __
.---.-.|  |  |--.---.-.|  |_.----.-----.-----.-----.
|  _  ||  |  _  |  _  ||   _|   _|  _  |__ --|__ --|
|___._||__|_____|___._||____|__| |_____|_____|_____|

                    Unicode code point [55CE] mapping to 嗎                    
┌─────────────────────────────────────────────────────────────────────────────┐
│ Font name                                                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな                                                       │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな,.Aqua Kana Bold,.Aqua かな ボールド                   │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Kaku Gothic Interface                                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Sans GB Interface                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .LastResort                                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang HK,.蘋方\-港,.苹方\-港                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang SC,.蘋方\-簡,.苹方\-简                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang TC,.蘋方\-繁,.苹方\-繁                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Fangsong Std,Adobe 仿宋 Std,Adobe Fangsong Std R,Adobe 仿宋 Std R     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Heiti Std,Adobe 黑体 Std,Adobe Heiti Std R,Adobe 黑体 Std R           │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Kaiti Std,Adobe 楷体 Std,Adobe Kaiti Std R,Adobe 楷体 Std R           │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Ming Std,Adobe 明體 Std,Adobe 明體 Std L,Adobe Ming Std L             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Song Std,Adobe 宋体 Std,Adobe Song Std L,Adobe 宋体 Std L             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Arial Unicode MS                                                            │
├─────────────────────────────────────────────────────────────────────────────┤
│ GB18030 Bitmap                                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti SC,黑體\-簡,黒体\-簡,Heiti\-간체,黑体\-简                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti TC,黑體\-繁,黒体\-繁,Heiti\-번체,黑体\-繁                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro          │
│ W3,ヒラギノ角ゴ Pro W3                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro          │
│ W6,ヒラギノ角ゴ Pro W6                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN       │
│ W3,ヒラギノ角ゴ ProN W3                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN       │
│ W6,ヒラギノ角ゴ ProN W6                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic Pro,ヒラギノ丸ゴ Pro,Hiragino Maru Gothic Pro          │
│ W4,ヒラギノ丸ゴ Pro W4                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic ProN,ヒラギノ丸ゴ ProN,Hiragino Maru Gothic ProN       │
│ W4,ヒラギノ丸ゴ ProN W4                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W3,ヒラギノ明朝    │
│ Pro W3                                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W6,ヒラギノ明朝    │
│ Pro W6                                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W3,ヒラギノ明朝 │
│ ProN W3                                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W6,ヒラギノ明朝 │
│ ProN W6                                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文         │
│ W3,Hiragino Sans GB W3,冬青黑体简体中文 W3                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文         │
│ W6,Hiragino Sans GB W6,冬青黑体简体中文 W6                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W1,ヒラギノ角ゴシック W1     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W2,ヒラギノ角ゴシック W2     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W3,ヒラギノ角ゴシック W3     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W4,ヒラギノ角ゴシック W4     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W5,ヒラギノ角ゴシック W5     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W6,ヒラギノ角ゴシック W6     │
├─────────────────────────────────────────────────────────────────────────────┤
│ Meiryo,メイリオ                                                             │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Gothic,MS ゴシック                                                     │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Mincho,MS 明朝                                                         │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PGothic,MS Pゴシック                                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PMincho,MS P明朝                                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang HK,蘋方\-港,苹方\-港                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang SC,蘋方\-簡,苹方\-简                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang TC,蘋方\-繁,苹方\-繁                                               │
├─────────────────────────────────────────────────────────────────────────────┤
│ PMingLiU,新細明體                                                           │
├─────────────────────────────────────────────────────────────────────────────┤
│ SimSun,宋体                                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti SC,宋體\-簡,宋体\-简                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti TC,宋體\-繁,宋体\-繁                                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│ STSong                                                                      │
└─────────────────────────────────────────────────────────────────────────────┘

0
投票

如果您知道代码点的十六进制值,则可以使用仅使用 fontconfig 实用程序的单行代码来完成此操作:

$ fc-list --format='%{postscriptname}\n' ':charset=55ce'
Unifont

找到六角形更加困难。这是一种方法:

$ echo -n 嗎 | iconv -f utf-8 -t ucs4 | od -t x1
0000000 00 00 55 ce
0000004
© www.soinside.com 2019 - 2024. All rights reserved.