有人能告诉我以下结果的差异原因吗?
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
谢谢
答案 0 :(得分:6)
有趣:)
将%@
传递到NSLog
的格式字符串只是意味着'在对象上调用description
。
description
NSArray
上的description
处理unicode字符的方式与每个对象上NSArray
的处理方式不同。
但是,我怀疑NSLog
上的描述方法只调用它包含的每个对象的描述然后由于某种原因我不是100%肯定,在将它们转储到之前对它们进行编码{{1}}。
答案 1 :(得分:3)
将%@
传递给NSLog
会调用阵列上的[NSArray description]
。 NSArray class reference表示[NSArray description]
&#34;返回一个表示数组内容的字符串,格式为属性列表&#34;。这样做会将unicode字符转换为NSNonLossyASCIIStringEncoding
。如果您颠倒过程,NSArray将正确打印。
completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
这可以通过将原始字符串与所有\ Uxxxx编码的通用字符转换为ac字符串,然后将c字符串解码为NSString
来反转由{{NSNonLossyASCIIStringEncoding
完成的[NSLog description]
1}}。如果没有先转换为c字符串,我还没有想出办法。