带有Unicode字符的iOS 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\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" )
和
for(id object in placemarks ) {NSLog(@"%@ \n", object);}
造成
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
谢谢
有趣的:)
将%@
传递给NSLog
的格式string就意味着“调用对象的description
”。
它看起来像NSArray
处理unicode字符description
不同于每个对象的description
。
不过,我怀疑, NSArray
的描述方法只是调用它包含的每个对象的描述,然后,由于某种原因,我不是100%确定,在将它们转储到NSLog
之前进行编码。
将%@
传给NSLog
确实会调用数组上的[NSArray description]
。 NSArray类引用说[NSArray description]
“返回一个string,表示数组的内容,格式化为属性列表”。 这样做将unicode字符转换为NSNonLossyASCIIStringEncoding
。 如果您逆转过程,您的NSArray将正确打印。
completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
这是通过将所有的\ Uxxxx编码的通用字符转换为acstring,然后将cstring解码为一个反转NSNonLossyASCIIStringEncoding
的NSString
来完成的[NSLog description]
。 我还没有想出一个方法来做到这一点,而不先转换为ACstring。