2013-10-20 147 views
0

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

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

有没有什么我可以在我的最后得到这样的数据解析正确?

+0

您需要将数据转换为以UTF8编码的NSData或从源编码正确转换的NSString(无论您的JSON解析器接受哪个)。 –

回答

0

,如果你有LATIN1的NSData(ISO-8859-1),那么你可能需要将其转换为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); 
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 
}