Obtenga caracteres compatibles de una fuente: en C #

Tengo una fuente de terceros con soporte para caracteres japoneses que necesito usar para una aplicación. Siempre que un carácter no sea compatible con esta fuente, se dibujará el rectángulo que se ve a menudo (“carácter predeterminado”). Obviamente no todos los caracteres japoneses son compatibles, porque si trato de dibujar las traducciones que nos dio nuestra oficina de traducción, hay muchos rectangularjs.

Necesito que me notifiquen siempre que se use un carácter no compatible, para poder cambiar la fuente de este único carácter (como Word lo hace) o implementar alguna otra reacción a eso.

¿Algunas ideas? Si pudiera extraer una lista de caracteres Unicode del archivo TTF, entonces podría verificar si un personaje usado está cubierto por esta lista. ¿Pero cómo puedo hacerlo?

Basado en esta respuesta .

Asegúrese de hacer referencia a PresentationCore.dll

Intenta usar este código:

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

Imagen de salida eliminada debido a que ImageShack reemplaza la imagen vieja y borrada con un anuncio.

¿No puedes simplemente levantarlo en el Mapa de caracteres y tomar nota de los rangos de caracteres que no están definidos?

Probablemente haya una forma programática de analizar un archivo TTF para esta información, pero si solo se trata de una fuente en particular, probablemente sea más fácil abrir el Mapa de caracteres, establecer el Grupo por subgrupo y grupo Unicode por “Hiragana / Katakana japonés” y tomar nota de los rangos definidos