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

dav*_*rty 6 html css php character font-face

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

目前,它采用指定的,翼状风格的字体,并且代表它显示为每个unicode数字,与标准系统字体(例如arial)并排在我从unicode数字33出发的那一刻-255.

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

正如您所看到的,实际上值得为此字体显示的字符是少数字符,并且此unicode范围内的许多字符甚至不显示默认的sans-serif字体.这并不重要的东西,所有的可用字符反正显示,而纯粹是出于好奇,我很想知道,如果有一种方法来判断哪些字符的字体表示.有人知道解决方案吗?

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

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

我希望平面文件的介绍不会冒犯任何人太多,我试图保持这个精简和意味着.

sel*_*dog 4

我相信您要查找的信息位于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());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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