我读过很多关于这个问题的问答,但找不到适合我情况的答案。
我从用 PHP 创建的 REST 服务检索 JSON 响应。这是我的代码:
NSURLResponse *response = nil;
NSError *theError1 = nil;
NSError *theError2 = nil;
NSURL *webServiceUrl = [NSURL URLWithString:@"http://..."];
NSURLRequest *request = [NSURLRequest requestWithURL:webServiceUrl cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
NSData *theData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&theError1];
NSString *dataString = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataString);
id json = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingAllowFragments | NSJSONReadingMutableContainers error:&theError2];
if (theError2 != nil)
NSLog(@"%@", theError2);
当我在浏览器中调用 REST 调用时,我看到以下响应,这似乎与 XCode 记录的内容相同:
{
"Name": "REST Service",
"Product": "REST Test",
"Version": "1.0.0.0",
"Copyright": "2013 Test Company"
}
但是,当我执行上面的代码时,会创建并记录以下错误:
错误域=NSCocoaErrorDomain代码=3840“无法读取数据,因为它已损坏。” (字符 3 周围的值无效。)UserInfo=0x100547430 {NSDebugDescription=字符 3 周围的值无效。}
我究竟做错了什么?
好的,一如既往,检查实际数据而不是字符串表示是值得的 - 感谢@Bvarious。
事实证明,负责创建 JSON 的 PHP 脚本都是“带有 BOM 的 UTF8”,因此 PHP 为每个涉及的脚本返回了一个 BOM。
一旦我将所有 PHP 文件更改为“UTF8 without BOM”,一切似乎都很好 - 不过需要在 MAC 上进行测试。
抱歉打扰了,继续努力。
(@Bvarious:如果您想写一个答案,我很乐意投票并接受它,因为您向我指出了解决方案)。
现在能够按预期解析 JSON。请记住始终仔细检查文本文件编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)