0

我访问一个 RESTFUL 网址并取回结果。结果采用 JSON 格式。我通过以下方式将响应转换为字符串:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

json 变量的值为 0x0。当我将鼠标悬停在它上面时,我看到了<Invalid CFStringRef>。我如何调试它以说明它为什么无效?我在 A JSON 解析器中呈现通过浏览器返回的 JSON。这检查很好。

通过在 URL 中输入 ID 来返回结果。其他 ID 返回结果没有问题。结果集相当大。

4

2 回答 2

2

首先我会initWithData:encoding:用来设置 NSString。差别很小,但这种方法是有原因的。

然后,我会做一个 hexdumpself.receivedData来看看里面到底有什么。如果该数据未正确 UTF8 编码,initWithData:encoding:则将失败。

(谷歌为 NSData 十六进制转储找到其他人的实用功能来做到这一点)

我发现有时 Web 服务的编码很草率。所以我通常实现这样的后备:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

遗憾的是,这是必需的,但许多 Web 服务没有正确编写或配置。

于 2010-03-14T23:40:39.470 回答
1

用于NSLog查看字节。

于 2010-03-14T23:20:45.670 回答