使用NSLog打印NSData

use*_*142 50 iphone objective-c

如何使用NSLog打印NSData对象的内容:

-(void) post:(NSString*) msg to:(NSString*) link{
    NSString *myRequestString = [NSString stringWithFormat:@"message=%@", msg];
    NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: link]]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [request setHTTPMethod: @"POST"];
    [request setHTTPBody: myRequestData];
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
    NSLog("%@", *returnData); //doesn't work

}
Run Code Online (Sandbox Code Playgroud)

我想打印*returnData的内容...

iMO*_*DEV 80

使用将NSData转换为NSString

NSString *strData = [[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

并在NSLog中打印NSString,如下所示

NSLog(@"%@",strData);
Run Code Online (Sandbox Code Playgroud)

这个答案是为JeremyP编辑的,因为他不知道如何知道UTF-8的内容,尽管这不是对这个问题的讨论.

您可以在以下委托方法中获取响应标头

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *dic = [httpResponse allHeaderFields];
}
Run Code Online (Sandbox Code Playgroud)

这本词典将为您提供如下所示的完整标题信息

<CFBasicHash 0x5a45e40 [0x24b2380]>{type = immutable dict, count = 7,
entries =>
0 : <CFString 0x5d1bf60 [0x24b2380]>{contents = "X-Aspnet-Version"} = <CFString 0x5d21a60 [0x24b2380]>{contents = "2.0.50727"}
1 : <CFString 0x41a03a8 [0x24b2380]>{contents = "Server"} = <CFString 0x5d272f0 [0x24b2380]>{contents = "Microsoft-IIS/6.0"}
2 : <CFString 0x41a0010 [0x24b2380]>{contents = "Content-Length"} = <CFString 0x5d28630 [0x24b2380]>{contents = "385"}
6 : <CFString 0x419ff48 [0x24b2380]>{contents = "Cache-Control"} = <CFString 0x5d29c70 [0x24b2380]>{contents = "private, max-age=0"}
10 : <CFString 0x5d1c640 [0x24b2380]>{contents = "X-Powered-By"} = <CFString 0x5d26f10 [0x24b2380]>{contents = "ASP.NET"}
11 : <CFString 0x41a0060 [0x24b2380]>{contents = "Content-Type"} = <CFString 0x5d29c90 [0x24b2380]>{contents = "text/xml; charset=utf-8"}
12 : <CFString 0x41a0088 [0x24b2380]>{contents = "Date"} = <CFString 0x5d27610 [0x24b2380]>{contents = "Fri, 08 Jul 2011 15:23:10 GMT"}
} 
Run Code Online (Sandbox Code Playgroud)

检查charset ="utf-8",您将从此处获得编码.

  • 您如何知道数据是UTF-8. (2认同)

Jer*_*myP 60

如果你这样做:

NSLog(@"%@", returnData); 
Run Code Online (Sandbox Code Playgroud)

NSData将以十六进制格式记录.我想这可能就是你所追求的.

如果要将其转换为字符串并记录字符串,首先需要找出使用的字符集. HTTP的默认字符集不是UTF-8,而是ISO-8859-1.一种方法是检查Content-Typecharset部分的标题.

  • 这是正确的答案,你不能假设数据的内容编码!http标头,字节顺序标记等有一个原因,所有文本都不一样. (4认同)