Подтвердить что ты не робот

Получить поддерживаемые символы шрифта - в С#

У меня есть сторонний шрифт с поддержкой японских символов, которые мне нужно использовать для приложения. Всякий раз, когда символ не поддерживается этим шрифтом, рисуется часто просматриваемый прямоугольник ( "символ по умолчанию" ). Очевидно, что не все японские символы поддерживаются, потому что, если я попытаюсь нарисовать переводы, которые дал нам наш переводческий офис, есть много прямоугольников.

Мне нужно получать уведомления, когда используется не поддерживаемый символ, поэтому я могу изменить шрифт для этого одиночного символа (например, Word) или реализовать некоторую другую реакцию на это.

Любые идеи? Если бы я мог извлечь список символов Юникода из файла TTF, тогда я смог бы проверить, включен ли этот символ в этот список. Но как я могу это сделать?

4b9b3361

Ответ 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 заменяет старое, удаленное изображение на рекламу.

Ответ 2

Не можете ли вы просто подтянуть его в Карте символов и принять к сведению диапазоны символов, которые не определены?

Вероятно, существует программный способ разбора файла TTF для этой информации, но если это только один конкретный шрифт, то, вероятно, проще просто открыть карту символов, установите группу под Unicode Subrange и Group под "Japanese Hiragana/Katakana" и просто обратите внимание на определенные диапазоны.