美文网首页
iOS 解决打印 NSDictionary 时,中文乱码问题

iOS 解决打印 NSDictionary 时,中文乱码问题

作者: Jaly_xxx | 来源:发表于2016-12-12 19:36 被阅读1601次

在开发中打印 NSDictionary 会出现中文乱码,到网上查了这个问题,发现一篇文章(链接),虽然解决了乱码问题,但是打乱了输出格式,这个买卖可划不来。干脆自己写一个扩展,解决乱码问题。文章最后给出了Demo地址

说说解决中文乱码的原理

1、先介绍3个方法,这是打印NSDictionary、NSArray,时所调用的

- (NSString *)description ; 
- (NSString *)descriptionWithLocale:(nullable id)locale;  
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;

作用与区别

(1)三个方法的作用:

都是将NSDictionary、NSArray对象转化为字符串。

(2)区别

1、- (NSString *)description ;
作用:在控制台使用po 命令时,输出的文字就是这个方法返回的

2、- (NSString *)descriptionWithLocale:(nullable id)locale;
用NSLog方法打印的文字是这个方法返回的

可以看看下面的图。

description(po NSlog).png
使用 po命令调用description方法, 用NSLog打印,调用- (NSString *)descriptionWithLocale:(nullable id)locale方法。
3、- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level;
这个方法和第二个方法相比,多了个 level 参数,代表所打印的文字向右平移 level 个字符(我用的"\t")。

下图中分别是 level 传0 和 2 的情况。


localIndent.png

2、了解这三个方法之后,只要写个分类,重写description相关的方法,自己把NSDictionary、NSArray转换成字符串,顺便格式化一下,就可以了。

1、字典中可能会套字典,也可能套数组,数组中也可能套用字典。

以NSDictionary为例分析一下,数组的原理类似。
程序中写了这个方法:

- (NSString *)descriptionWithLevel:(int)level 

level最少为 1,代表最外层,如果发现某个key对应的value也是NSDictionary,那么递归调用这个方法,只是,level要传(level + 1)。

总结:解决这个问题的关键应该是算法,对递归算法不熟的同学,可以到网上搜索一下。

Demo地址

相关文章

网友评论

      本文标题:iOS 解决打印 NSDictionary 时,中文乱码问题

      本文链接:https://www.haomeiwen.com/subject/hftvmttx.html