oc- NSLog中文乱码如何解决?(已解决)

这里我们假设有一个OC数组,然后里面放了一个Person类对象p1,
然后我们希望通过直接打印数组,得到数组里元素的相关信息。
  1. Person *p1 = [[Person alloc init];
  2.         NSArray *array1 =@[p1];
  3.         for (id s in array1) {
  4.             NSLog(@"%@",s);
  5.         }
复制代码

如果直接像上面那样写的话,我们会得到类对象的内存地址
(打印一个对象:NSLog(@"%@", stu); 默认情况下打印的时对象的名字和内存地址)
  1. <Person: 0x100202ea0>
复制代码
[size=16.3636360168457px]显示这不是我们想要的结果,所以我们会重写Person的 description方法
  1. - (NSString *)description  {
  2.     return [NSString stringWithFormat:@"我是一个人"];
  3. }
复制代码
然后我们再次执行程序,你会发现程序一样没有得到我们想要的结果,出现乱码非中文了。
  1. "\U6211\U662f\U4e00\U4e2a\U4eba"
复制代码
上面的东西貌似是文字的unicode编码。
等,我们先再回顾一下思路,虽然这很简单。
打印数组,用NSLog%@",是不是也应该重写description方法?
我刚测试了,其实不用除非数组元素的description方法里含有中文。
但是,有时候又必须要有中文呢,那我们就重写description方法吧。
由于NSArray是一个系统的类,又没有在工程中有这个类的文件,所以我想到了用分类,好像也可以直接写在main函数中,那我们先写在分类里吧。
于是我尝试这样写
  1. - (NSString *)description {
  2.     id s;
  3.     for (s in self) {
  4.       [NSString stringWithFormat:@"%@", s];
  5.         NSLog(@"%@",s);
  6.     }
  7.    return s;
  8. }
复制代码
结果还是不行。
原来这种情况下我们要重写的是descriptionWithLocale:方法
  1. - (NSString *)descriptionWithLocale:(id)locale
  2. {
  3.     NSMutableString *strM = [NSMutableString string];
  4.     [strM appendString:@"(\n"];
  5.    
  6.     for (id obj in self) {
  7.         [strM appendFormat:@"\t%@,\n", obj];
  8.     }
  9.     [strM appendString:@")"];

  10.     return strM;
  11. }
复制代码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值