在中文情况下将NSString转换为NSData

每个人,我知道这个问题是很多人要问,堆栈溢出有很多答案,但在我的情况下,我尝试从这里得到的JSON格式,代码是这样的:

// Get JSON NSString* path = @"http://opendata.epa.gov.tw/ws/Data/UV/?format=json"; NSURL* url = [NSURL URLWithString:path]; NSString* jsonString = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; NSArray* arrayResult = dic; NSDictionary* resultDic = [arrayResult objectAtIndex:0]; NSLog(@"resultDic:%@", resultDic); NSString* uv = [resultDic objectForKey:@"UVI"]; NSLog(@"UVI:%@", uv); NSString* publicshedTime = [resultDic objectForKey:@"PublishTime"]; NSLog(@"PublishTime:%@", publicshedTime); NSLog(@"中文"); 

我用了 :

 NSString* jsonString = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 

但这不是有效的,我不知道为什么。

在控制台中,我可以正确地看到中文单词,在debugging器中,我可以看到“jsonString”的内容是正确的,但我不知道为什么我将它转换为NSData,内容会出错,输出如下所示:

 2014-05-27 03:24:09.307 Tab demo[3014:60b] resultDic:{ County = "\U5609\U7fa9\U5e02"; PublishAgency = "\U4e2d\U592e\U6c23\U8c61\U5c40"; PublishTime = "2014-05-27 03:00"; SiteName = "\U5609\U7fa9"; TWD97Lat = "23,29,52"; TWD97Lon = "120,25,28"; UVI = 0; } 2014-05-27 03:24:09.308 Tab demo[3014:60b] UVI:0 2014-05-27 03:24:09.308 Tab demo[3014:60b] PublishTime:2014-05-27 03:00 2014-05-27 03:24:09.308 Tab demo[3014:60b] 中文 

当然,没有中文单词的其他数据显示正确。

这个错误看起来像编码错误,但我不知道如何正确解决它,谁能告诉我的方式来解决它,非常感谢!

当使用NSLoglogging时,不要在控制台中比较对象的内容。 这是不可靠的,因为将对象转换为string的algorithm没有logging,不严格,仅用于debugging目的。

使用compare:方法比较对象。