使用 CGContextShowTextAtPoint 打印时,Unicode 符号在 ° 符号之前使用 ¬ 打印



我正在使用CGContextShowTextAtPoint调用在我的视图上打印一个°或一个μ。 代码行如下所示。

int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°", number];
CGContextShowTextAtPoint(context, 10, 5, [theText2 cStringUsingEncoding:NSUTF8StringEncoding], [theText2 length]);

它的输出结果为

"100¬"

如果我增加打印的字符串的长度,它会显示以下内容

"100°"

预期输出应为:

"100°"

这肯定与打印 unicode 字符有关。

对于CGContextShowTextAtPoint,您必须将字符串转换为 CGContextSelectFont 中指定的编码。这很可能是"Mac Roman"编码。CGContextShowTextAtPoint的最后一个参数是转换字符串的长度,而不是NSString的长度:

CGContextSelectFont(context, "Helvetica", 10.0, kCGEncodingMacRoman);
int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°µ", number];
const char *s = [theText2 cStringUsingEncoding:NSMacOSRomanStringEncoding];
CGContextShowTextAtPoint(context, 10, 5, s, strlen(s));

请注意,这仅在您使用"Mac Roman"字符集中的字符时才有效。(由于Mac Roman编码中的一些历史变化,它也不适用于欧元字符。

对于一般的 Unicode 字符串,NSString方法drawAtPoint:withFont:可能更适合。

我知道它有一些编码问题。但这里有一个小修复使用此选项,其中 161 表示度数符号

char str[20] = {0};
sprintf(str, "%d%c",number,161);
CGContextShowTextAtPoint(context, 10, 5, str, strlen(str));

相关内容

  • 没有找到相关文章

最新更新