iOS开发之网络数据解析--中文输出

对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果:

 

为了避免这个问题,可以通过类别来重写系统和打印相关的方法。

步骤:

1、新建文件名:Foundation+Log的.m后缀的这一个文件,你没看错,就这个.m文件,不需要.h声明文件

2、然后把以下源码全部拷贝进去即可:

 1 //
 2 //  NSDictionary+Log.m
 3 //  01-掌握-多值参数和中文输出
 4 //
 5 
 6 #import <Foundation/Foundation.h>
 7 
 8 // 重写系统的打印方法,
 9 // 需要知道的是NSDictionary和NSArray各自都有打印方法
10 // 也就是说,你重写了NSArray打印重写方法,打印NSArray对象才会执行重写的方法
11 
12 // 如果是通过子类来重写父类系统的方法,那么使用的时候就需要导入这个子类
13 // 但是通过类别重写系统方法,就不需要import导入,因为系统中导入了已经有了同名的被重写的方法了,系统会优先加载类别里的重写的方法,连.h声明文件都可以不用了,因为系统中已经有.h声明文件
14 
15 @implementation NSDictionary (Log)
16 
17 //控制输出:对字典或者是数组进行排版
18 -(NSString *)descriptionWithLocale:(id)locale
19 {
20     NSMutableString *string = [NSMutableString string];
21     //设置开始
22     [string appendString:@"{
"];
23     
24     //设置key-value
25     [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
26         [string appendFormat:@"%@:",key];
27         [string appendFormat:@"%@,
",obj];
28     }];
29     //设置结尾
30     [string appendString:@"}"];
31     
32     //删除最后的逗号
33     NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
34     if (range.location != NSNotFound) {
35         [string deleteCharactersInRange:range];
36     }
37     return string;
38 }
39 
40 /*
41 -(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
42 {
43     NSMutableString *string = [NSMutableString string];
44     //设置开始
45     [string appendString:@"{"];
46     
47     //设置key-value
48     [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
49         
50         [string appendFormat:@"%@:",key];
51         [string appendFormat:@"%@",obj];
52     }];
53     //设置结尾
54     [string appendString:@"}"];
55     return string;
56 }
57  */
58 @end
59 
60 
61 @implementation NSArray (Log)
62 
63 //控制输出:对字典或者是数组进行排版
64 -(NSString *)descriptionWithLocale:(id)locale
65 {
66     NSMutableString *string = [NSMutableString string];
67     //设置开始
68     [string appendString:@"["];
69     
70     //设置key-value
71    [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
72        [string appendFormat:@"%@,",obj];
73        
74    }];
75     //设置结尾
76     [string appendString:@"]"];
77     
78     NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
79     if (range.location != NSNotFound) {
80         [string deleteCharactersInRange:range];
81     }
82     
83     return string;
84 }
85 
86 @end

 

相关源码百度云分享链接: http://pan.baidu.com/s/1jGUWkrc 密码: 9yq6

原文地址:https://www.cnblogs.com/goodboy-heyang/p/5188515.html