使用CGContextShowTextAtPoint打印时,使用¬前符号打印unicode符号

时间:2012-12-06 06:32:12

标签: objective-c ios xcode graphics

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

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

输出结果为

“100¬”

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

“100¬°”

预期输出应为:

“100°”

这肯定要打印unicode字符。

2 个答案:

答案 0 :(得分: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编码的某些历史变化,它对欧元字符也不起作用。)

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

答案 1 :(得分:0)

我知道它有一些编码问题。 但这是一个小修复 使用此处161表示度数符号

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