如果JSON数据中有中文,输出Unicode编码,无法识别解决办法

本文介绍了一种解决Objective-C中使用NSLog打印包含中文的JSON数据时出现Unicode编码问题的方法。通过为NSArray和NSDictionary定义分类,并重写descriptionWithLocale方法来实现。这样可以确保输出的中文内容保持原样。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSLog+NSArray

问题

  • 如果JSON数据中有中文,输出的是经过Unicode编码的内容,无法识别.

解决

  • 定义NSArray和NSDictionary的分类,重写系统方法descriptionWithLocale,重写此方法不需要导入头文件.
  • descriptionWithLocale,当NSLog输出数组或字典时,系统会自动调用这个方法.
  • descriptionWithLocale方法中,遍历元素,并打印元素.

  • 声明

#import <Foundation/Foundation.h>

@interface NSArray (Log)

@end

@interface NSDictionary (Log)

@end
  • 实现
#import "NSArray+Log.h"

@implementation NSArray (Log)

/// 打印数组和字典时会自动调用这个方法,在分类中重写这个方法时,在使用时不需要导入头文件

- (NSString *)descriptionWithLocale:(id)locale
{
    // 创建可变字符串
    NSMutableString *stringM = [NSMutableString string];
    // 拼接开头
    [stringM appendString:@"(\n"];
    // 遍历出元素,拼接中间的内容部分
    [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [stringM appendFormat:@"\t%@,\n",obj];
    }];
    // 拼接结尾
    [stringM appendString:@")\n"];

    return stringM;
}

@end

@implementation NSDictionary (Log)

- (NSString *)descriptionWithLocale:(id)locale
{
    // 创建可变字符串
    NSMutableString *stringM = [NSMutableString string];
    // 拼接开头
    [stringM appendString:@"{\n"];
    //  遍历出元素,拼接中间的内容部分
    [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        [stringM appendFormat:@"\t%@ = %@;\n",key,obj];
    }];
    // 拼接结尾
    [stringM appendString:@"}\n"];

    return stringM;
}

@end
  • 提示 :

    • 一个文件中其实是可以定义多个类的声明和实现的
  • 使用 : 把这个文件放进工程中即可,今后无论打印数组还是字典,都可以看到原始的中文.不需要导入头文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值