Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSLog打印NSData_Iphone_Objective C - Fatal编程技术网

Iphone 使用NSLog打印NSData

Iphone 使用NSLog打印NSData,iphone,objective-c,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: [myReque

如何使用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

}

我想打印*returnData…

的内容,使用

NSString *strData = [[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
并在NSLog中打印NSString,如下所示

NSLog(@"%@",strData);
<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"}
} 
这个答案是为JeremyP编辑的,因为他不知道如何知道UTF-8的内容,尽管这不是对这个问题的讨论

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

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *dic = [httpResponse allHeaderFields];
}
这本字典会给你完整的标题信息,如下所示

NSLog(@"%@",strData);
<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"}
} 
{type=immutable dict,count=7,
条目=>
0:{contents=“X-Aspnet-Version”}={contents=“2.0.50727”}
1:{contents=“Server”}={contents=“Microsoft IIS/6.0”}
2:{contents=“Content Length”}={contents=“385”}
6:{contents=“Cache Control”}={contents=“private,max age=0”}
10:{contents=“X-Powered-By”}={contents=“ASP.NET”}
11:{contents=“Content Type”}={contents=“text/xml;charset=utf-8”}
12:{contents=“Date”}={contents=“Fri,2011年7月8日15:23:10 GMT”}
} 
选中charset=“utf-8”,您将从此处获得编码。

如果执行此操作:

NSLog(@"%@", returnData); 
NSData将以十六进制格式记录。我想这可能就是你想要的


如果要将其转换为字符串并记录该字符串,首先需要找出使用了什么字符集HTTP的默认字符集不是UTF-8,而是ISO-8859-1。一种方法是检查charset部分的
内容类型
标题
NSLog(@"%@", *returnData); // this is wrong.

NSLog(@"%@", returnData); // this is correct.

我希望我能帮忙

如果需要将数据字节作为字符串,请检查此答案


我经常想看看NSData实际上代表了什么。通常它是某种文本,这使得十六进制有点不方便。因此,我通常在web浏览器的JavaScript控制台中编写此代码段,运行速度非常快,如果需要继续处理,可以轻松修改

  • 将以下脚本复制/粘贴到浏览器控制台中(右键单击此处->检查元素),然后按enter键

    (function nsDataHexToString() {
        var str = prompt("Paste the hex string here:", "ié. 48656c6c 6f207468 657265...")
        var chs = str.replace(/[^A-F0-9]/ig,"").split("")
        var res = ""
        var cnt = 2
        for (var i = 0; i+cnt-1<chs.length; i+=cnt) {
            var nr = ""
            for (var j=0; j<cnt; j++)
                nr += chs[i+j]
            nr = parseInt(nr, 16)
            res += String.fromCharCode(nr)
        }
        console.log(res)
        return res
    })()
    
  • 复制十六进制(类似于
    )并粘贴到浏览器提示中

  • 然后控制台将显示一个字符串:“您好”
  • 最近,它是为了检查来自
    NSAttributedString.dataFromRange
    的输出,rtfd使用了稍微不同的编码,但我得到了我需要的:)对于一些json转换问题也很有用,等等


    祝你好运:)

    如果它对你有效,你能将它标记为答案,这样其他人就可以将它视为正确答案吗?它给了我一个->警告:从不兼容的指针类型传递“NSLog”的参数1你需要做NSLog(strData);您将向NSLog传递什么?您如何知道数据是UTF-8格式的。您可以在didReceiveResponse中检查内容类型content-Encoding。这是正确的答案您不能假设数据的内容编码!http头、字节顺序标记等,所有文本都不相同,这是一个原因。我认为这是一个更好的答案。要将十六进制数据作为可读字符串检查,这通常效果很好::)您忘记在NSLog函数中添加@。这里的问题不在于您使用的是NSLog(“”)而不是NSLog(@”)。(也就是说,您传递的是C字符串而不是NSString?)(不管格式如何?)Thx@CoryImdieke!很高兴这有帮助:)