zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    cs硕士妹子找工作经历【阿里人搜等互联网】
    EJB到底是什么,真的那么神秘吗??
    到底EJB是什么
    安全性测试:
    掌握 Promise 的逻辑方法
    VS2019 不能下载的解决办法
    Java8基础系列-Stream
    周期模型(典型的几种):
    软件生存周期及其模型是什么?
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/5188515.html
Copyright © 2011-2022 走看看