
[英]NSLog outputs unicode characters as garbage when debugging on the iPhone
[英]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]
完成的NSNonLossyASCIIStringEncoding
的NSString
,可以实现此目的。 我还没有找到一种方法,而不先转换为ac字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.