[iOS] NSDictionary 내부의 NSString 모두 UTF8로 Encode하거나 Decode 하기
이미 기능을 JSON에서 지원하고 있는데 제가 못찾았을 가능성도 있으며,
테스트를 몇번 못해봐서 버그가 있을 수도... 버그를 발견하신 분은 꼭 댓글을 부탁드립니다~~~!!!
NSDictionary 클래스를 확장하여 사용하였습니다.
코드는 UTF8로 되어 있지만 인코딩 코드만 바꾸셔서 사용하시면 다른 인코딩도 되겠죠~?
<헤더부분>
#import <Foundation/Foundation.h>
@interface NSDictionary(UTF8)
- (NSDictionary*)dictionaryByUTF8Encode;
- (NSDictionary*)dictionaryByUTF8Decode;
@end
<구현부분>
#import "NSDictionaryUTF8.h"
@implementation NSDictionary(UTF8)
- (NSDictionary*)dictionaryByUTF8Encode
{
NSMutableDictionary* encodeDict = [NSMutableDictionary dictionary];
NSArray* keys = [self allKeys];
for (NSString* key in keys) {
NSObject* obj = [self objectForKey:key];
if ([obj isKindOfClass:[NSMutableString class]]) {
NSString* stringObj = (NSString*)obj;
[encodeDict setValue:[stringObj stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] forKey:key];
} else if ([obj isKindOfClass:[NSDictionary class]]) {
[encodeDict setValue:[(NSDictionary*)obj dictionaryByUTF8Encode] forKey:key];
} else {
[encodeDict setValue:obj forKey:key];
}
}
return encodeDict;
}
- (NSDictionary*)dictionaryByUTF8Decode
{
NSMutableDictionary* decodeDict = [NSMutableDictionary dictionary];
NSArray* keys = [self allKeys];
for (NSString* key in keys) {
NSObject* obj = [self objectForKey:key];
if ([obj isKindOfClass:[NSMutableString class]]) {
NSString* stringObj = (NSString*)obj;
[decodeDict setValue:[stringObj stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] forKey:key];
} else if ([obj isKindOfClass:[NSDictionary class]]) {
[decodeDict setValue:[(NSDictionary*)obj dictionaryByUTF8Decode] forKey:key];
} else {
[decodeDict setValue:obj forKey:key];
}
}
return decodeDict;
}
@end