【问题标题】:Invalid Unicode characters in XCodeXCode 中的 Unicode 字符无效
【发布时间】:2013-04-24 02:57:21
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 尝试大写 E... 例如"\uE118"
  • 这个问题可能会有所帮助:stackoverflow.com/questions/1237565/…
  • @trojanfoe 的链接很好。 CGContextShowTextAtPoint 不是很灵活(根据字体,即使是简单的显示也会有问题)。见lists.apple.com/archives/cocoa-dev/2012/May/msg00593.html
  • 谢谢!我得到了它的工作。使用 CGContextShowGlyphsAtPoint(context, 15, 15, (const CGGlyph *)"4", 1);但我在字符串中使用的符号与字体不匹配。所有数字 0 - 9,然后是小写字母,然后是大写字母,按照字形的顺序(不是匹配的字符)穿过大部分字体,但我不知道如何让其他字形显示出来。例如“0”表示U+E119,“1”表示U+E11A
  • 我还有一个问题,就是说某些字符无效,这很奇怪。

标签: xcode unicode


【解决方案1】:

“无效的通用字符”错误是 due to the definition in C99:本质上,\uNNNN 转义应该允许一个程序员调用一个变量 føø 和另一个程序员(可能无法输入 ø) 将其称为 f\u00F8\u00F8。为了让每个人都更容易解析,您不能对控制字符或“基本字符集”中的字符使用\u 转义(也许是从Java's unicode escapes 学到的教训,它可以做一些疯狂的事情,比如结束 cmets )。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2015-12-16
      • 2011-08-10
      • 2013-09-10
      • 2019-05-13
      • 2016-11-28
      相关资源
      最近更新 更多