经常可以看到用nslog打印出来的数据是二进制格式:
{"title":"\u8bc4\u8bba\u6807\u9898","cover":"http:\/\/wan.deyi.com\/uploads\/2015\/11\/23\/9e6b671dd2473485aceeb310b9a86282.jpg","type":"7","id":"56494dae7f8b9a14398b456b"}],"tag":[],"list":
[{"type":"4","id":"773","title":
"\u4e3d\u5c71\u97f3\u4e50\u519c\u573a(\u6ea7\u6c34\u5e97)","cover":
"http:\/\/wan.deyi.com\/uploads\/2015\/09\/16\/c1a95a41be7a60a763befb77e9828db3.jpg","introduce":
"\u96649\u8da3\u6a2a\u751f\u554a\uff01","coupon_have":
"0","price":
30,"discount":"11","g_buy":"0"},
如何将中文数据正常输出?
这确实不是二进制,是 unicode 编码,可以在使用 lldb 中使用
p
命令或在 shell 中使用echo
命令打印这些编码,均可打印出可读的中文。从 iOS 5 开始(没有验证,但早期打印数组和字典均和现在打印对象的显示一致,<名称:内存地址>),打印数组和字典显示出具体的数据结构(
description
方法),更方便了调试,但其中打印字符串时并未做任何处理(如此处的字符转义)。由于只是便于调试,而且打印具体字符串时,调用字符串的desciption
方法时,会转义为可读中文,也就是到具体处理的时候会自动转义,不用也不应该自己去转。非得在控制台显示中文的话可以这样,
NSLog(@"%@",[NSString stringWithCString:[[dictionary description] cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
;也可以重写description
方法。但个人感觉其实没有这个必要。补充:最近在使用
p
命令时,发现p "\U4e3d\U5c71"
这种形式打印会报错error: incomplete universal character name
,发现u
的大小写是不一样,应该的形式是p "\u4e3d\u5c71"
(四位)或者p "\U00004e3d\U00005c71"
(八位)。虽然没找到明确文字说明,但可以推论出,小写的是BMK
[NSString 与 Unicode],默认0号平面,缺省前四位0。