如何检测字体中定义的字符?

时间:2012-07-25 17:40:05

标签: php html css character font-face

我正在制作一个简单的工具来帮助处理css图标字体。

目前,它采用指定的wingdings风格字体,并代表它显示的每个unicode数字,与我标准系统字体(例如arial)并排显示unicode number 33-255。

熟悉字体和字符编码的人已经猜到了,很多这些地方都是空的。这是一个例子: enter image description here

正如您所看到的,实际上值得为此字体显示的字符属于少数字符,此unicode范围内的许多字符甚至不会显示为默认的sans-serif字体。这不是关键的东西,无论如何都显示了所有可用的角色,但纯粹出于好奇,我想知道是否有办法告诉哪些字符用字体表示。有人知道解决方案吗?

理想情况下,首选服务器端解决方案,您喜欢的任何语言。但是,任何解决方案都是有价值的。

对于好奇,我现有的代码在github:Font Looper

我希望平面文件的介绍不会冒犯任何人太多,我试图让这个人保持精简和卑鄙。

1 个答案:

答案 0 :(得分:3)

我相信您要查找的信息位于该字体的CMAP表中。我不是字体专家,但我的理解是CMAP表将unicode点映射到字形索引。因此,如果没有映射到unicode点的字形,则可以假定字体不支持该字符。

以下是我使用WPF媒体库找到的一些示例C#代码:

var fontFamilies = System.Windows.Media.Fonts.GetFontFamilies(@"C:\Windows\Fonts\Arial.ttf");

foreach (var family in fontFamilies)
{
    foreach (var typeface in family.GetTypefaces())
    {
        var glyph = null as System.Windows.Media.GlyphTypeface;

        if (typeface.TryGetGlyphTypeface(out glyph))
        {
            foreach (var kvp in glyph.CharacterToGlyphMap)
            {
                Console.WriteLine(kvp.Key.ToString() + " : " + kvp.Value.ToString());
            }
        }
    }
}

不知道这对你有多大的帮助,但你确实说任何语言/解决方案都是有价值的。

所有这些类都可以在System.Windows.Media namespace中找到,它是 PresentationCore.dll 程序集的一部分。