如何找到为什么NSMutableData无效
-
20-09-2019 - |
题
我访问一个宁静的网址,并取回结果。结果是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
看字节。
不隶属于 StackOverflow