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:@"{\n"]; 23 24 //设置key-value 25 [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { 26 [string appendFormat:@"%@:",key]; 27 [string appendFormat:@"%@,\n",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