Dado un carácter Unicode específico, digamos 嗎, ¿cómo iterar sobre todas las fuentes instaladas en el sistema y enumerar las que contienen un glifo para este carácter?¿Cómo determinar qué fuentes contienen un carácter específico?
Respuesta
He probado esto en .NET 4.0, necesita agregar referencia a PresentationCore para obtener la fuente & tipo de letra para que funcione. También marque Fonts.GetFontFamilies overloads.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Media;
class Program
{
public static void Main(String[] args)
{
PrintFamiliesSupprotingChar('a');
Console.ReadLine();
PrintFamiliesSupprotingChar('â');
Console.ReadLine();
PrintFamiliesSupprotingChar('嗎');
Console.ReadLine();
}
private static void PrintFamiliesSupprotingChar(char characterToCheck)
{
int count = 0;
ICollection<FontFamily> fontFamilies = Fonts.GetFontFamilies(@"C:\Windows\Fonts\");
ushort glyphIndex;
int unicodeValue = Convert.ToUInt16(characterToCheck);
GlyphTypeface glyph;
string familyName;
foreach (FontFamily family in fontFamilies)
{
var typefaces = family.GetTypefaces();
foreach (Typeface typeface in typefaces)
{
typeface.TryGetGlyphTypeface(out glyph);
if (glyph != null && glyph.CharacterToGlyphMap.TryGetValue(unicodeValue, out glyphIndex))
{
family.FamilyNames.TryGetValue(XmlLanguage.GetLanguage("en-us"), out familyName);
Console.WriteLine(familyName + " Supports ");
count++;
break;
}
}
}
Console.WriteLine();
Console.WriteLine("Total {0} fonts support {1}", count, characterToCheck);
}
}
Muchas gracias, parece que funciona bien! Por supuesto, en el código de producción uno no codificaría la carpeta de fuentes de esa manera. Uno probablemente también debería tomar un 'int' en lugar de un' char' (o un 'string' y luego usar' char.ConvertToUtf32') ya que de lo contrario lo estás limitando al BMP. ¡Gracias de nuevo! – Timwi
Derecho, no es código de calidad de producción, es más de ** howto **. –
En GDI + podría consultar fácilmente la lista de familias de fuentes instaladas creando un 'nuevo System.Drawing.InstalledFontCollection()' y recorriendo la propiedad '.Families' (es decir, no era necesaria ninguna ubicación de URI o de carpeta, solo consultó a Windows de alguna manera) ¿Hay alguna manera similar de hacer esto con las cosas de WPF PresentationCore? – BrainSlugs83
- 1. cómo determinar si un carácter es un carácter chino
- 2. Makefile: Filtrar cadenas que contienen un carácter
- 3. Regex para eliminar un carácter repetido específico
- 4. Determinar la ubicación y de un carácter para representar texto
- 5. Cómo determinar si KeyCode es carácter imprimible
- 6. Cómo dividir líneas en un carácter específico en Notepad ++?
- 7. fiesta - expresión después del último carácter específico
- 8. subcadena y devolver el valor después de un carácter específico
- 9. Encontrar un carácter específico en una cadena en Matlab
- 10. Prueba si los niños contienen texto específico con jQuery
- 11. Cómo convertir una Cadena en una matriz de Cadenas que contienen un carácter cada
- 12. ¿Cómo se filtra una consulta LDAP para grupos que contienen un usuario específico?
- 13. Determinar si JavaScript e.keyCode es un carácter imprimible (sin control)
- 14. determinar si script de PowerShell ha sido punto de fuentes
- 15. ¿Es posible determinar las fuentes que Windows elige para el enlace de fuentes?
- 16. ¿Cómo insertar un carácter en un índice específico de cadena usando C#?
- 17. ¿Cómo determinar qué métodos se llaman en un método?
- 18. cómo eliminar todas las instancias de un carácter específico de una cadena
- 19. ¿Cómo determinar qué CRC usar?
- 20. cómo determinar si un tipo implementa un tipo específico interfaz genérica
- 21. Java: cómo comprobar si el carácter pertenece a un bloque Unicode específico?
- 22. ¿Cómo determinar qué es CFTypeRef?
- 23. Eliminar carácter específico de una cadena según el valor hexadecimal
- 24. ¿Qué es un carácter nulo binario?
- 25. ¿Cómo puedo determinar si un archivo específico está abierto en Windows?
- 26. ¿Cómo borrar todo en una cadena después de un carácter específico?
- 27. cómo insertar nueva línea después de un carácter específico en las secuencias de comandos
- 28. ¿Cómo reemplazo una subcadena de una cadena antes de un carácter específico?
- 29. ¿Cómo puedo seleccionar una cadena desde el principio hasta un carácter específico?
- 30. Cómo inyectar propiedades de cadena que contienen <carácter en Spring beans?
Ver: [Compruebe si hay caracteres no admitidos/glifos en una fuente] (http://stackoverflow.com/questions/5025740/c-check-for-unsupported-characters-glyphs-in-a-font) – Ani
No C#, pero esta secuencia de comandos python funciona muy bien: http://unix.stackexchange.com/a/268286/26952 –