1

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

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

输出结果为

“100-”

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

“100°”

预期的输出应该是:

“100°”

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

4

2 回答 2

1

因为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 编码的一些历史变化,它也不适用于 Euro 字符。)

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

于 2012-12-06T12:38:56.430 回答
0

我知道它有一些编码问题。但这里有一个小修复在 161 代表度数符号的地方使用这个

char str[20] = {0};
sprintf(str, "%d%c",number,161);
CGContextShowTextAtPoint(context, 10, 5, str, strlen(str));
于 2012-12-06T08:24:02.363 回答