1

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

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

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

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

它没有抱怨这一点,但什么也没显示。当我在 FontForge 中打开字体时,它显示字形在那里并且有效。Font Book 也很好地验证了字体。如果我在 TextEdit 中使用字体并将 Unicode 字符与字符查看器 Unicode 表一起放入,它看起来就好了。只是 Quartz 不会显示它。

任何想法为什么这不起作用?

4

2 回答 2

1

“无效的通用字符”错误是由于 C99 中的定义造成的:本质上\uNNNN,转义应该允许一个程序员调用一个变量 føø,而另一个程序员(可能无法键入 ø)将其称为f\u00F8\u00F8. 为了让每个人都更容易解析,您不能对控制字符或“基本字符集”中的字符使用转义(也许是从Java 的 unicode 转义\u中吸取的教训,它可以做一些疯狂的事情,比如结束注释)。

第二个错误可能是因为"\ue118"正在编译为 UTF-8 序列"\xee\x8e\x98"——三个chars。CGContextShowTextAtPoint()假设一个char(字节)是一个字形,并且CGContextSelectFont()仅支持编码kCGEncodingMacRoman(将字节解码为“Óéò”)和kCGEncodingFontSpecific(发生的事情是任何人的猜测。文档说不要使用CGContextSetFont()(它没有指定字符到字形映射) 与CGContextShowText()or结合使用CGContextShowTextAtPoint()

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

于 2013-04-23T18:57:21.763 回答
0

我只是将字体更改为最后使用标准的字母数字字符。简单得多。

于 2012-08-09T20:40:38.317 回答