获取字体的支持的字符 - 在C#(Get supported characters of a fon

2019-07-18 09:29发布

我有与我需要使用的应用程序的日文字符支持第三方字体。 每当一个字符不会用该字体的支持,经常看到矩形(“默认字符”)绘制。 显然,并非所有的日文字符支持,因为如果我试着画出我们的翻译办公室给我们的翻译,也有很多的矩形。

我需要的时候使用了不支持的字符通知,这样我就可以改变字体此单个字符(如Word做的话)或执行一些其他的反应了这一点。

有任何想法吗? 如果我能提取从TTF文件Unicode字符的列表,然后我将能够检查使用的字符是否被这份名单涵盖。 但我怎么能这样做呢?

Answer 1:

基于这个答案 。

一定要参考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的与广告替换旧,删除的图像。



Answer 2:

你就不能拉起来的字符映射表,并注意没有定义的字符范围的?

有可能是来解析该信息的TTF文件以编程的方式,但如果它只是一个那么特殊字体它可能更容易只打开字符映射表,通过为Unicode子范围和集团通过“日文平假名/片假名”中设置的集团,只是注意的限定范围。



文章来源: Get supported characters of a font - in C#