iOS - 如何使用变音符正确读取JSON文件

时间:2015-05-27 17:26:50

标签: ios objective-c json

我在将JSON文件转换为NSDictionary时遇到困难而不会丢失变音符号。

{
"België": "5",
"Haïti": "45"
}

这是我在Xcode中的支持文件中的.json文件内容的简短版本。 我需要将它们转换为NSDictionary而不会丢失那些变音符号。

NSString *file =[[NSBundle mainBundle] pathForResource:@"countries_and_rates" ofType:@"json"];
NSString *cr = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:NULL];

之后,我将cr提供给此方法:

+ (NSDictionary*)jsonFromData:(NSData*)data {
    if([self isEmpty:data] || ![data isKindOfClass:[NSData class]])
        return nil;

    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    if(!str)
        return nil;

    NSError* error;
    id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

    if(error)
        NSLog(@"************** Error: jsonFromData: %@/%@", error.localizedDescription, error);
    if([json isKindOfClass:[NSDictionary class]])
        return json;
    else if([json isKindOfClass:[NSArray class]])
        return [NSDictionary dictionaryWithObject:json forKey:@"results"];

    return @{};
}

如果有人可以帮助我并告诉我我做错了什么。 仅供参考:尝试各种编码,例如NSISO和NSUTF

1 个答案:

答案 0 :(得分:2)

不要乱用编码,让框架为你解决:

    NSData *data = [NSData dataWithContentsOfFile:filepath];
    NSError *error = nil;
    id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];