JSONObjectWithData和umlauts

时间:2013-10-20 17:11:32

标签: ios objective-c

我正在使用提供JSON格式数据的服务(不是我的)。当我尝试使用JSONObjectWithData:options:error:解析数据时,如果有变音符号(例如ö),则返回nil。如果没有变音符号或其他特殊字符,它可以正常工作。

运行服务的人说数据编码为ISO-8859-1(不是UTF-8)。

我能在我的最后做些什么来正确解析这些数据吗?

2 个答案:

答案 0 :(得分:2)

尝试下面的代码:

NSError *error;
NSString *string = [NSString stringWithContentsOfURL:webURL encoding:NSISOLatin1StringEncoding error:&error];
NSData *utf8Data = [string dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:utf8Data options:kNilOptions error:&error];

if (error) {
    //Error handling
} else {
    //use your json object
}

答案 1 :(得分:0)

如果您使用带有latin1(ISO-8859-1)的NSData,那么您可能需要先将其转换为UTF-8,如下所示:

const char latin1[1] = {196}; // iso-8859-1 umlaut character code
NSData *latin1Data = [NSData dataWithBytes:latin1 length:1];

NSString* utfstr = [[NSString alloc] initWithCString:latin1Data.bytes encoding:NSISOLatin1StringEncoding];

NSLog(@"%@",utfstr);