在开发中打印 NSDictionary 会出现中文乱码,到网上查了这个问题,发现一篇文章(连接),虽然解决了乱码问题,可是打乱了输出格式,这个买卖可划不来。干脆本身写一个扩展,解决乱码问题。文章最后给出了Demo地址git
#说说解决中文乱码的原理 ###一、先介绍3个方法,这是打印NSDictionary、NSArray,时所调用的github
- (NSString *)description ;
- (NSString *)descriptionWithLocale:(nullable id)locale;
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;
复制代码
##做用与区别 ###(1)、三个方法的做用: 将NSDictionary、NSArray对象转化为字符串。 ###(2)、区别算法
- (NSString *)description ;
在控制台使用po 命令时,输出的文字就是这个方法返回的
复制代码
- (NSString *)descriptionWithLocale:(nullable id)locale;
用NSLog打印的文字是这个方法返回的
复制代码
能够看看下面的图。 数组
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;
这个方法和第二个方法相比,多了个 level 参数,表明所打印的文字向右平移 level 个字符(我用的"\t")。
复制代码
下图中分别是 level 传0 和 2 的状况。 bash
- (NSString *)descriptionWithLevel:(int)level
复制代码
level最少为 1,表明最外层,若是发现某个key对应的value也是NSDictionary,那么递归调用这个方法,只是,level要传(level + 1)。 ##总结:解决这个问题的关键应该是算法,对递归算法不熟的同窗,能够到网上搜索一下。 Demo地址spa