Ottieni caratteri supportati di un carattere – in C #

Ho un font di terze parti con supporto per caratteri giapponesi che devo usare per un’applicazione. Ogni volta che un carattere non è supportato da questo carattere, viene disegnato il rettangolo spesso visto (“carattere predefinito”). Ovviamente non tutti i caratteri giapponesi sono supportati, perché se provo a disegnare le traduzioni che il nostro ufficio di traduzione ci ha dato, ci sono molti rettangoli.

Ho bisogno di essere avvisato ogni volta che viene usato un personaggio non supportato, in modo che possa cambiare il carattere per questo singolo carattere (come Word lo fa) o implementare qualche altra reazione a questo.

Qualche idea? Se potessi estrarre un elenco di caratteri Unicode dal file TTF, allora sarei in grado di verificare se un personaggio usato è coperto da questo elenco. Ma come posso farlo?

Basato su questa risposta .

Assicurati di fare riferimento a PresentationCore.dll

Prova a utilizzare questo codice:

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 characterMap = glyph.CharacterToGlyphMap; foreach (KeyValuePair kvp in characterMap) { Console.WriteLine(String.Format("{0}:{1}", kvp.Key, kvp.Value)); } } } } } } 

Immagine di output rimossa a causa di ImageShack che sostituisce l’immagine vecchia e cancellata con un annuncio.

Non puoi semplicemente tirarlo su in Mappa caratteri e prendere nota degli intervalli di caratteri che non sono definiti?

Probabilmente c’è un modo programmatico per analizzare un file TTF per queste informazioni, ma se è solo un font particolare, probabilmente è più semplice aprire la Mappa caratteri, impostare il gruppo su Unicode Subrange e Raggruppa di “Japanese Hiragana / Katakana” e prendere nota degli intervalli definiti.