美文网首页
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