我正在使用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));