Get supported characters of a font - in C#
Asked Answered
R

2

25

I have a third party font with support for japanese characters which I need to use for an application. Whenever a character is not supported by this font, the often seen rectangle ("default character") is drawn. Obviously not all japanese characters are supported, because if I try to draw the translations that our translation office gave us, there are a lot of rectangles.

I need to be notified whenever a not supported character is used, so that I can change the font for this single character (like Word does it) or implement some other reaction to that.

Any ideas? If I could extract a list of unicode characters from the TTF file, then I would be able to check whether a used character is covered by this list. But how can I do so?

Roundworm answered 17/9, 2009 at 15:21 Comment(1)
i am exactly facing the same problem. i have to exclude these rectangle type characters from different third party fonts. someone please give any solution....Manana
S
28

Based on this answer.

Be sure to reference PresentationCore.dll

Try using this code:

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

                }
            }
        }
    }
}

Output image removed due to ImageShack replacing old, deleted image with an advert.

Susi answered 17/9, 2009 at 15:43 Comment(1)
Is there a way to do this with UWP? I need to accomplish a related task in a UWP app.Gigigigli
C
-3

Can't you just pull it up in Character Map and take note of the character ranges that are not defined?

There's probably a programmatic way to parse a TTF file for this information but if it's just one particular font then it's probably easier just to open Character Map, set the Group by to Unicode Subrange and Group by "Japanese Hiragana/Katakana" and just take note of the defined ranges.

Celerity answered 17/9, 2009 at 15:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.