2009-09-17 5 views
20

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

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

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

+0

Я точно сталкиваюсь с той же проблемой. я должен исключить эти символы типа прямоугольника из разных сторонних шрифтов. кто-то, пожалуйста, дайте любое решение .... – Mohsan

ответ

-2

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

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

22

Основано на this answer.

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

+0

Есть ли способ сделать это с помощью UWP? Мне нужно выполнить соответствующую задачу в приложении UWP. – erickfiveten

 Смежные вопросы

  • Нет связанных вопросов^_^