我正在制作一个简单的工具来帮助处理css图标字体。
目前,它采用指定的wingdings风格字体,并代表它显示的每个unicode数字,与我标准系统字体(例如arial)并排显示unicode number 33-255。
熟悉字体和字符编码的人已经猜到了,很多这些地方都是空的。这是一个例子:
正如您所看到的,实际上值得为此字体显示的字符属于少数字符,此unicode范围内的许多字符甚至不会显示为默认的sans-serif字体。这不是关键的东西,无论如何都显示了所有可用的角色,但纯粹出于好奇,我想知道是否有办法告诉哪些字符用字体表示。有人知道解决方案吗?
理想情况下,首选服务器端解决方案,您喜欢的任何语言。但是,任何解决方案都是有价值的。
对于好奇,我现有的代码在github:Font Looper
我希望平面文件的介绍不会冒犯任何人太多,我试图让这个人保持精简和卑鄙。
答案 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 程序集的一部分。