6

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

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

正如那些熟悉字体和字符编码的人已经猜到的那样,这些地方很多都是空的。这是一个例子: 在此处输入图像描述

正如你所看到的,这个字体真正值得显示的字符是少数,而且这个 unicode 范围内的许多字符甚至不会出现在默认的无衬线字体中。这不是关键的东西,无论如何都会显示所有可用的字符,但纯粹出于好奇,我很想知道是否有办法判断字体中表示哪些字符。有人知道解决方案吗?

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

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

我希望平面文件的演示不会太冒犯任何人,我正在努力保持这个简洁和刻薄。

4

1 回答 1

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

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

所有这些类都可以在作为PresentationCore.dll程序集一部分的System.Windows.Media 命名空间中找到。

于 2012-07-26T20:41:16.117 回答