5

谁能告诉我以下结果差异的原因?

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 

谢谢

4

2 回答 2

6

有趣的 :)

传递%@NSLog' 格式字符串只是意味着'调用description一个对象'。

看起来descriptiononNSArray处理 unicode 字符的方式与description处理每个对象的方式不同。

但是,我怀疑 description 方法NSArray只是在它包含的每个对象上调用 description,然后出于某种原因,我不确定 100% 是否在将它们转储到NSLog.

于 2012-09-14T10:44:15.283 回答
3

传递%@NSLog确实调用[NSArray description]了数组上的。NSArray 类引用[NSArray description]“返回一个表示数组内容的字符串,格式化为属性列表”。这样做会将 unicode 字符转换为NSNonLossyASCIIStringEncoding. 如果您反转该过程,您的 NSArray 将正确打印。

completionHandler:^(NSArray *placemarks, NSError *error) {
       NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);

这通过将所有 \Uxxxx 编码的通用字符的原始字符串转换为 ac 字符串,然后将 c 字符串NSString解码NSNonLossyASCIIStringEncoding为由[NSLog description]. 如果不先转换为交流字符串,我还没有想出办法做到这一点。

于 2014-05-30T17:27:36.047 回答