-2

我从服务器收到了回复:

 [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>

我不得不说,有时它确实有效!它以某种方式取决于价值观...

4

1 回答 1

1

因为使用第一个日志,您正在打印NSData实例,而使用第二个日志,您NSString想要从数据中生成。但是如果数据不是有效的 UTF-8(可能是这种情况,因为它不是 NUL 终止的,并且stringWithUTF8String:需要一个 NUL 终止的字符串,所以它不会在最后停止并且它可能会读取垃圾),那么它返回nil

你想要的是:

content = [[[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding] autorelease];
于 2013-02-06T15:28:52.273 回答