我访问一个宁静的网址,并取回结果。结果是JSON。我把经由响应成字符串:

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

在JSON变量值为0x0。当我鼠标悬停在上面,我看到<Invalid CFStringRef>。如何调试此通知为何无效?我渲染通过一个JSON解析器的浏览器还给了JSON。细检查出来。

结果通过在URL输入ID给定的回。其他ID返回结果没有问题。结果集是相当大的。

有帮助吗?

解决方案

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

然后,我会做self.receivedData的hexdump都可以看到什么是真正在那里。如果数据没有被正确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];
    }
}

这是一种悲哀,这是必需的,但许多网络服务未书面或适当配置。

其他提示

使用NSLog看字节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top