2009-09-17 12 views
20

Mam czcionkę innej firmy z obsługą znaków japońskich, których potrzebuję użyć dla aplikacji. Ilekroć znak nie jest obsługiwany przez tę czcionkę, rysowany jest często widziany prostokąt ("znak domyślny"). Oczywiście nie wszystkie japońskie znaki są obsługiwane, ponieważ jeśli spróbuję narysować tłumaczenia, które dostarczyło nam nasze biuro tłumaczeń, istnieje wiele prostokątów.Uzyskaj obsługiwane znaki czcionki - w języku C#

Muszę być powiadamiany za każdym razem, gdy używany jest znak nieobsługiwany, aby zmienić czcionkę dla tego pojedynczego znaku (np. Word) lub zaimplementować inną reakcję.

Wszelkie pomysły? Gdybym mógł wyodrębnić listę znaków Unicode z pliku TTF, to byłbym w stanie sprawdzić, czy użyta postać jest objęta tą listą. Ale jak mogę to zrobić?

+0

Mam dokładnie ten sam problem. Muszę wykluczyć te znaki prostokąta z różnych czcionek stron trzecich. komuś proszę podać jakieś rozwiązanie ... – Mohsan

Odpowiedz

-2

Nie możesz po prostu wyciągnąć go na mapie postaci i zanotować zakresy znaków, które nie są zdefiniowane?

Prawdopodobnie istnieje programowy sposób analizowania pliku TTF dla tej informacji, ale jeśli jest to tylko jedna konkretna czcionka, prawdopodobnie łatwiej będzie otworzyć Mapę postaci, ustawić Grupę na Grupę Unicode i Grupę według "Japońskiej Hiragany/Katakany" i po prostu zanotuj określone zakresy.

22

Na podstawie this answer.

należy odwołać PresentationCore.dll

Spróbuj użyć tego kodu:

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

       } 
      } 
     } 
    } 
} 

wyjściowy obraz usunięty z powodu ImageShack zastępując stare, usunięte zdjęcie z reklamą.

+0

Czy jest jakiś sposób na zrobienie tego z UWP? Muszę wykonać powiązane zadanie w aplikacji UWP. – erickfiveten