测试一个语音 SDK 的时候,发现打印出来字典里的中文汉字都显示为 UTF-8 的字符,百度了一下解决办法,发现大都是用给 NSArray 和 NSDictionary 创建分类的方法解决的,但是很多文章可能是写的匆忙,或者是复制粘贴的,不够美观和一目了然。而且创建分类的方式,对比我以前用小码哥的一个类来说,多了一个 .h 文件,不够精简。所以就做个笔记,留作备用。
首先新建一个 OC 的 .m 文件,不知道怎么新建也可以直接,创建普通的 UIVIew 的类,把 .h 删除,把 .m 所有除注释以外代码删除,修改成如下文所示一致就好。
- #import <Foundation/Foundation.h>
-
- @implementation NSDictionary (Log)
- - (NSString *)descriptionWithLocale:(id)locale
- {
- NSMutableString *string = [NSMutableString string];
-
- // 开头有个{
- [string appendString:@"{\n"];
-
- // 遍历所有的键值对
- [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
- [string appendFormat:@"\t%@", key];
- [string appendString:@" : "];
- [string appendFormat:@"%@,\n", obj];
- }];
-
- // 结尾有个}
- [string appendString:@"}"];
-
- // 查找最后一个逗号
- NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
- if (range.location != NSNotFound)
- [string deleteCharactersInRange:range];
-
- return string;
- }
- @end
-
- @implementation NSArray (Log)
-
- - (NSString *)descriptionWithLocale:(id)locale
- {
- NSMutableString *string = [NSMutableString string];
-
- // 开头有个[
- [string appendString:@"[\n"];
-
- // 遍历所有的元素
- [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- [string appendFormat:@"\t%@,\n", obj];
- }];
-
- // 结尾有个]
- [string appendString:@"]"];
-
- // 查找最后一个逗号
- NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
- if (range.location != NSNotFound)
- [string deleteCharactersInRange:range];
-
- return string;
- }
-
- @end