我从服务器得到了回复:
[NSURLConnection
sendAsynchronousRequest:request
queue:[[NSOperationQueue alloc] init]
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *error)
{
if ([data length] >0 && error == nil)
{
NSLog(@"DATA1: %@",data);
NSString *content;
content = [NSString stringWithUTF8String:[data bytes]];
NSLog(@"DATA2: %@",content);
这里有些奇怪的事。第二个NSLOG
向我显示null
数据 - 但如果数据为空,他怎么能通过if statement
?
第一个日志告诉我:<636f6e66 69726d65 64>
。
我不得不说有时它确实有效!它以某种方式取决于价值......
答案 0 :(得分:1)
因为使用第一个日志,您打印的是NSData
实例,而第二个是您想要从数据生成的NSString
。但是如果数据无效UTF-8(可能是这种情况,因为它不是NUL终止的,并且stringWithUTF8String:
需要一个以NUL结尾的字符串,所以它不会在结束时停止并且它可能会读取垃圾),然后它返回nil
。
你想要的是:
content = [[[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding] autorelease];