zoukankan      html  css  js  c++  java
  • 在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码。

    在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码,如下代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        NSArray *array = @[@"张三",@"lisi",@"123"];
        NSLog(@"%@",array);
        // 
        
    }

    运行之后:

    2015-09-29 12:37:35.713 03-log的技巧[2233:66890] (
        "U5f20U4e09",
        lisi,
        123
    )

    这里的“张三”就被打印成了"U5f20U4e09”(注:利用for循环遍历是不会出现这个问题的)。如果我们需要解决这个问题,那么我们就需要给NSArray写一个分类,来进行更改,代码如下:

    #import "NSArray+Log.h"
    
    @implementation NSArray (Log)
    /**
     *  根据设置的本地化数据设置数组
     *
     *  由于我们在打印这个数组的时候,如果遇到有中文的时候它打印出来的是编码格式,而不是中文文字(for循环遍历除外)
     *  这个时候如果我们想让它能正常显示的话,我们就需要重写这个方法。
     *  @return <#return value description#>
     */
    -(NSString *)descriptionWithLocale:(id)locale
    {
        // 1.首先拼接一个括号  我们的目的是让数组打印出来的时候和系统打印的格式一致。
        /**
         (
            zhangsan,
            lisi,
            wangwu
         )
         */
        NSMutableString *mutabStr = [NSMutableString stringWithString:@"(
    "];
        
        [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            [mutabStr appendFormat:@"	 %@,
    ",obj];
        }];
        [mutabStr appendFormat:@")"];
        return mutabStr;
    }
    @end

    此时打印出的结果是:

    2015-09-29 12:41:54.894 03-log的技巧[2272:68398] (
         张三,
         lisi,
         123,
    )
  • 相关阅读:
    C# 复制(深拷贝、浅拷贝)
    Nunit-Writing Tests
    Thread.Sleep vs. Task.Delay
    AutoMapper Getting started
    设计:抽象类类还是接口
    C++Primer第五版——习题答案详解(八)
    C++Primer第五版——习题答案详解(七)
    C++Primer第五版——习题答案详解(六)
    C++Primer第五版——习题答案详解(五)
    C/C++中的函数指针的使用与总结
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/4846038.html
Copyright © 2011-2022 走看看