如何检测Unicode字符是否映射到缺失符号方块?

时间:2009-11-30 00:57:37

标签: iphone objective-c unicode

有没有办法检测iPhone上的字体中是否存在Unicode字符,即检测字符是映射到可打印字形还是映射到方形“缺少字符”符号?

例如,如果我想使用此代码段生成随机的Wingding字符:

NSString *s = [NSString stringWithFormat:@"%C", (0x2700 + (arc4random() % 0x0100))];

有没有办法判断生成的字符串是否会呈现为小方块,或者当我用它绘制它时是否为真正的字形:

[s drawAtPoint:x withFont:[UIFont systemFontOfSize:30]];

谢谢!

... [R

4 个答案:

答案 0 :(得分:1)

NSFont有一个UIFont没有的属性coveredCharacterSet。因此,我建议您使用台式PC创建coveredCharacterSet信息并将其放入您的iPhone应用程序中。

可在以下网址找到iphone上可用的字体列表:http://daringfireball.net/misc/2007/07/iphone-osx-fonts

答案 1 :(得分:1)

我能够使用Core Text的CTFontGetGlyphsForCharacters

来完成此任务
- (BOOL)isInCharSet:(unichar)character
{
    CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"Arial", 0.0, NULL);
    unichar characters[] = {character};
    CGGlyph glyphs[] = {};

    return (BOOL)CTFontGetGlyphsForCharacters(fontRef, characters, glyphs, 1);
}

答案 2 :(得分:0)

我不知道有任何方法可以对此进行特殊检查,但是我想可以为编码为Unicode的每个字符表设置一个带有配对值的NSDictionary,然后运行检查以确保生成的值落在其中一个配对值指定的范围内。

答案 3 :(得分:0)

为什么不在你的计算机上生成它,如果你使用的是系统字体,它应该是Helvetica,几乎所有程序的字体菜单选项都有字符映射。