2012-08-09 80 views
1

我试图将Unicode字符(使用自定义字体)放入一个字符串中,然后使用Quartz显示,但XCode因为某些原因不喜欢转义码,而且我确实卡住了。XCode中的Unicode字符无效

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

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

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

它不会抱怨这个,但什么都不显示。当我在FontForge中打开字体时,它会在那里显示字形并且有效。此外字体书验证字体就好了。如果我在TextEdit中使用字体,并将Unicode字符与字符查看器Unicode表一起放入,它看起来很好。 Just Quartz将不会显示它。

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

+0

尝试大写E. ..如“' \ uE118'“ – 2012-08-09 14:36:05

+0

不好运我恐怕 – 2012-08-09 14:40:01

+1

这个问题可能会有所帮助:http://stackoverflow.com/question s/1237565/iphone-cgcontextshowtextatpoint-for-japanese-characters – trojanfoe 2012-08-09 14:53:56

回答

0

我只是改变了字体在最后使用标准的字母数字字符。简单得多。

1

“无效通用字符”错误是due to the definition in C99:基本上\uNNNN转义应该允许一个程序员调用变量føø和其他编程器(可能无法O型谁)是指它作为f\u00F8\u00F8。为了让每个人都更容易解析,你不能使用\u转义来处理“基本字符集”中的控制字符或字符(也许是从Java's unicode escapes中学到的一个教训,它可以做结束注释等疯狂事情)。

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

如果您知道字形数,你可以使用CGContextShowGlyphs()CGContextShowGlyphsAtPoint(),或者CGContextShowGlyphsAtPositions()

相关问题