繁体   English   中英

带有Unicode字符的iOS NSLog错误

[英]iOS NSLog error with Unicode characters

谁能告诉我以下结果不一致的原因?

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的格式字符串仅表示“对象的调用description ”。

看起来NSArray description处理Unicode字符的方式与每个对象上的description不同。

但是,我怀疑NSArray上的description方法只是对其包含的每个对象调用description,然后由于某种原因(我不确定100%知道)在将它们转储到NSLog之前对其进行了编码。

%@传递给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字符串解码为与[NSLog description]完成的NSNonLossyASCIIStringEncodingNSString ,可以实现此目的。 我还没有找到一种方法,而不先转换为ac字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM