我正在使用提供JSON格式數據的服務(不是我的)。當我嘗試使用JSONObjectWithData:options:error:來解析數據時,如果有變音符(例如ö),則返回nil。如果沒有元音變音或其他特殊字符,它工作正常。JSONObjectWithData和變音符號
運行服務的人說數據編碼爲ISO-8859-1(不是UTF-8)。
有沒有什麼我可以在我的最後得到這樣的數據解析正確?
我正在使用提供JSON格式數據的服務(不是我的)。當我嘗試使用JSONObjectWithData:options:error:來解析數據時,如果有變音符(例如ö),則返回nil。如果沒有元音變音或其他特殊字符,它工作正常。JSONObjectWithData和變音符號
運行服務的人說數據編碼爲ISO-8859-1(不是UTF-8)。
有沒有什麼我可以在我的最後得到這樣的數據解析正確?
,如果你有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);
嘗試用下面的代碼:
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
}
您需要將數據轉換爲以UTF8編碼的NSData或從源編碼正確轉換的NSString(無論您的JSON解析器接受哪個)。 –