我有与我需要使用的应用程序的日文字符支持第三方字体。 每当一个字符不会用该字体的支持,经常看到矩形(“默认字符”)绘制。 显然,并非所有的日文字符支持,因为如果我试着画出我们的翻译办公室给我们的翻译,也有很多的矩形。
我需要的时候使用了不支持的字符通知,这样我就可以改变字体此单个字符(如Word做的话)或执行一些其他的反应了这一点。
有任何想法吗? 如果我能提取从TTF文件Unicode字符的列表,然后我将能够检查使用的字符是否被这份名单涵盖。 但我怎么能这样做呢?
我有与我需要使用的应用程序的日文字符支持第三方字体。 每当一个字符不会用该字体的支持,经常看到矩形(“默认字符”)绘制。 显然,并非所有的日文字符支持,因为如果我试着画出我们的翻译办公室给我们的翻译,也有很多的矩形。
我需要的时候使用了不支持的字符通知,这样我就可以改变字体此单个字符(如Word做的话)或执行一些其他的反应了这一点。
有任何想法吗? 如果我能提取从TTF文件Unicode字符的列表,然后我将能够检查使用的字符是否被这份名单涵盖。 但我怎么能这样做呢?
基于这个答案 。
一定要参考PresentationCore.dll中
请尝试使用此代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;
namespace fontChecker
{
class Program
{
static void Main(string[] args)
{
var families = Fonts.GetFontFamilies(@"C:\WINDOWS\Fonts\Arial.TTF");
foreach (FontFamily family in families)
{
var typefaces = family.GetTypefaces();
foreach (Typeface typeface in typefaces)
{
GlyphTypeface glyph;
typeface.TryGetGlyphTypeface(out glyph);
IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap;
foreach (KeyValuePair<int, ushort> kvp in characterMap)
{
Console.WriteLine(String.Format("{0}:{1}", kvp.Key, kvp.Value));
}
}
}
}
}
}
输出图像中去除由于ImageShack的与广告替换旧,删除的图像。
你就不能拉起来的字符映射表,并注意没有定义的字符范围的?
有可能是来解析该信息的TTF文件以编程的方式,但如果它只是一个那么特殊字体它可能更容易只打开字符映射表,通过为Unicode子范围和集团通过“日文平假名/片假名”中设置的集团,只是注意的限定范围。