CTFontGetGlyphsForCharacters总是返回false

请帮我理解下面的代码的问题:

NSString *fontName = @"ArialMT"; CGFloat fontSize = 20.0; CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL); NSString *characters = @"ABC"; NSUInteger count = characters.length; CGGlyph glyphs[count]; if (CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[characters cStringUsingEncoding:NSUTF8StringEncoding], glyphs, count) == false) NSLog(@"*** CTFontGetGlyphsForCharacters failed."); 

任何帮助表示赞赏。

您将得到一个包含UTF-8编码字符的Cstring,然后将其转换为unichar * 。 这是行不通的。 unichar是一个16位的UTF-16编码的字符。 一个简单的C语言转换将不会转换字符编码。

你需要把它的string作为一个unichar数组:

 NSString *fontName = @"ArialMT"; CGFloat fontSize = 20.0; CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL); NSString *string = @"ABC"; NSUInteger count = string.length; unichar characters[count]; [string getCharacters:characters range:NSMakeRange(0, count)]; CGGlyph glyphs[count]; if (CTFontGetGlyphsForCharacters(fontRef, characters, glyphs, count) == false) NSLog(@"*** CTFontGetGlyphsForCharacters failed.");