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

16

给定一个特定的Unicode字符,比如“嗎”,我该如何遍历系统中安装的所有字体,并列出其中包含此字符字形的字体?


不是C#,但这个Python脚本非常好用:http://unix.stackexchange.com/a/268286/26952 - Skippy le Grand Gourou
2个回答

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);
    }
}

非常感谢,看起来运行得很顺利!当然,在生产代码中,我们不会像那样硬编码字体文件夹。最好使用int而不是char(或者使用string并使用char.ConvertToUtf32)这样做,否则将限制在BMP范围内。再次感谢! - Timwi
4
对的,这不是生产级别的代码,更像是教程。 - Sanjeevakumar Hiremath
在GDI+中,您可以通过创建new System.Drawing.InstalledFontCollection()并循环遍历.Families属性(即不需要URI或文件夹位置,它只是以某种方式查询Windows)轻松查询已安装的字体系列列表。 WPF PresentationCore有类似的方法吗? - BrainSlugs83

2
你可以使用信天翁命令行工具 (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                                                                      │
└─────────────────────────────────────────────────────────────────────────────┘

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接