Objective c 使用Unicode字符的iOS NSLog错误
有人能告诉我以下结果不一致的原因吗Objective c 使用Unicode字符的iOS NSLog错误,objective-c,ios,unicode,nsstring,nslog,Objective C,Ios,Unicode,Nsstring,Nslog,有人能告诉我以下结果不一致的原因吗 completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"\n placemarks%@", placemarks); 结果: placemarks( "\U039b\U03b5\U03c9\U03c6\U03cc\U03c1\U03bf\U03c2 \U039a\U03cd\U03c0\U03c1\U03bf\U03c5 163, 16451 \U0391\U03c1\U0
completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"\n placemarks%@", placemarks);
结果:
placemarks(
"\U039b\U03b5\U03c9\U03c6\U03cc\U03c1\U03bf\U03c2 \U039a\U03cd\U03c0\U03c1\U03bf\U03c5 163, 16451 \U0391\U03c1\U03b3\U03c5\U03c1\U03bf\U03cd\U03c0\U03bf\U03bb\U03b7\U03c2, \U0395\U03bb\U03bb\U03ac\U03c2 @ <+37.90085408,+23.75654648> +/- 100.00m, region (identifier <+37.90085408,+23.75654648> radius 141.62) <+37.90085408,+23.75654648> radius 141.62m"
)
结果
2012-09-14 13:08:23.493 ΑΦΜ[1390:c07] Λεωφόρος Κύπρου 163, 16451 Αργυρούπολης, Ελλάς @ <+37.90085408,+23.75654648> +/- 100.00m, region (identifier <+37.90085408,+23.75654648> radius 141.62) <+37.90085408,+23.75654648> radius 141.62m
2012-09-14 13:08:23.493ΑΜ[1390:c07]∧εΩόρθρΚύπρο163,16451Αρρρροπολη962;,λλλλλάς+/-100.00m,区域(标识符半径141.62)半径141.62m
谢谢有意思:)
将%@
传递到NSLog
的格式字符串只意味着“调用对象上的描述”
它看起来像NSArray
上的description
处理unicode字符的方式不同于每个对象上的description
但是,我怀疑
NSArray
上的description方法只调用它包含的每个对象的description,然后,出于某种原因,我不是100%确定,在将它们转储到NSLog
之前对它们进行编码,将%@
传递到NSLog
确实调用了[NSArray description]
在阵列上。表示[NSArray description]
“返回表示数组内容的字符串,格式为属性列表”。这样做会将unicode字符转换为nsnonlossysistringencoding
。如果您反转此过程,您的NSArray将正确打印
completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
其工作原理是将包含所有\uxxx编码通用字符的原始字符串转换为c字符串,然后将c字符串解码为NSString
反转nsnonlossysistringencoding
,这是由[NSLog description]
完成的。我还没有找到一种不首先转换成c字符串的方法
completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);