我使用CGContextShowTextAtPoint调用在我的视图上打印°或μ。代码行如图所示。
int number = 100;
NSString *theText2 = [NSString stringWithFormat:@"%d°", number];
CGContextShowTextAtPoint(context, 10, 5, [theText2 cStringUsingEncoding:NSUTF8StringEncoding], [theText2 length]);
输出结果为
“100¬”
如果我增加打印字符串的长度,则会显示以下内容
“100¬°”
预期输出应为:
“100°”
这肯定要打印unicode字符。
答案 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));