XCode中的Unicode字符无效

时间:2012-08-09 14:30:53

标签: xcode unicode

我正在尝试将Unicode字符(使用自定义字体)放入一个字符串中然后使用Quartz显示,但XCode由于某种原因不喜欢转义码,而且我真的卡住了。

CGContextShowTextAtPoint (context, 15, 15, "\u0066", 1);

它不喜欢这个(拉丁文小写字母f)并且说它是“无效的通用字符”。

CGContextShowTextAtPoint (context, 15, 15, "\ue118", 1);

它并没有抱怨这一点,但没有显示任何内容。当我在FontForge中打开字体时,它会显示字形并且有效。 Font Book也很好地验证了字体。如果我使用TextEdit中的字体并使用字符查看器Unicode表放入Unicode字符,它看起来很好。 Just Quartz不会显示它。

为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

“无效的通用字符”错误是due to the definition in C99:基本上\uNNNN转义应该允许一个程序员调用变量 føø和另一个程序员(谁可能无法输入ø)将其称为f\u00F8\u00F8。为了让每个人都能更轻松地进行解析,你不能使用\u转义来控制角色或“基本角色集”中的角色(也许是从Java's unicode escapes学到的一个可以疯狂的教训结束评论等事情。

第二个错误可能是因为"\ue118"被编译为UTF-8序列"\xee\x8e\x98" - 三个charCGContextShowTextAtPoint()假设一个char(字节)是一个字形,而CGContextSelectFont()仅支持编码kCGEncodingMacRoman(将字节解码为“Óéò”)和{{1} (任何人的猜测都会发生。文档说不要与kCGEncodingFontSpecificCGContextSetFont()一起使用CGContextShowText()(没有指定字符到字形的映射)。

如果您知道字形编号,则可以使用CGContextShowTextAtPoint()CGContextShowGlyphs()CGContextShowGlyphsAtPoint()

答案 1 :(得分:0)

我刚刚更改了字体,最后使用了标准的字母数字字符。更简单。