How to check if a character is supported by a font
emoji, fonts, ios, objective-c, uifont
Solution
I finally solved it :
- (BOOL)isCharacter:(unichar)character supportedByFont:(UIFont *)aFont
{
UniChar characters[] = { character };
CGGlyph glyphs[1] = { };
CTFontRef ctFont = CTFontCreateWithName((CFStringRef)aFont.fontName, aFont.pointSize, NULL);
BOOL ret = CTFontGetGlyphsForCharacters(ctFont, characters, glyphs, 1);
CFRelease(ctFont);
return ret;
}
Problem
I'm working on an app with a text field. The text wrote in this field will be printed and I have an issue with some characters like emoji, chinese characters, etc... because the font do not provide these characters. It's why I want to get all the character provided by a font (The font is downloaded so I can deal directly with the file or with an UIFont object). I heard about `CTFontGetGlyphsForCharacters` but I'm not sure that this function do what I want and I can't get it work. Here is my code : ``` CTFontRef fontRef = CTFontCreateWithName((CFStringRef)font.fontName, font.pointSize, NULL); NSString *characters = @""; // emoji character NSUInteger count = characters.length; CGGlyph glyphs[count]; if (CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[characters cStringUsingEncoding:NSUTF8StringEncoding], glyphs, count) == false) NSLog(@"CTFontGetGlyphsForCharacters failed."); ``` Here `CTFontGetGlyphsForCharacters` return false. It's what I want because the character '' is not provided by the font used. The problem is when I replace `NSString *characters = @""` by `NSString *characters = @"abc"`, `CTFontGetGlyphsForCharacters` return again false. Obviously, my font provide a glyph for all the ASCII characters.