2011-07-08 29 views
46

如何打印的NSData對象的使用NSLog的內容:印刷的NSData使用的NSLog

-(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的內容...

+0

不是問題的一部分,在這裏,你正在使用的NSLog(「」),而不是的NSLog(@「」)。 (也就是說你傳遞一個C字符串而不是NSString?)(不管格式是什麼?) – portforwardpodcast

回答

57

如果你這樣做:

NSLog(@"%@", returnData); 

NSData的將十六進制格式進行記錄。我想這可能是你以後的事情。

如果你想把它變成一個字符串並記錄字符串,你首先需要找出使用的字符集。 HTTP的默認字符集不是UTF-8,它是ISO-8859-1。一種方法是檢查字符集部分的Content-Type標題。

+4

這是您無法假定數據的內容編碼的正確答案!有一個HTTP標頭,字節順序標記等的原因,所有文本是不一樣的。 – Joe

+0

有人想解釋投票嗎? – JeremyP

+0

我認爲這是一個更好的答案。 – antonio081014

77

轉換的NSData的NSString使用

NSString *strData = [[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding]; 

和打印的NSString中的NSLog像下面

NSLog(@"%@",strData); 

這個答案是爲JeremyP編輯的,因爲他不知道如何知道內容是UTF-8,儘管這不是對這個問題的討論。

你可以得到響應報頭在下面的委託方法

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

本詞典可以讓你像下面

<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"} 
} 

檢查的charset =「UTF-8」,您將獲得編碼整個頭信息從這裏。

+0

如果它適合你,你可以將它標記爲答案,這樣其他人可以將其視爲正確答案嗎? – iMOBDEV

+0

它給了我這個 - >警告:從不兼容的指針類型 – user559142

+0

你需要做的NSLog(strData)的傳遞'NSLog'的參數1;你傳給NSLog的是什麼? – iMOBDEV

4

有一件事你必須考慮過:

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

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

我希望我能幫助!

+5

你忘了在NSLog函數中添加@。 –

3

我有點經常希望看到什麼NSData的實際表現。通常這是某種文本,這使得十六進制有點不方便。因此,我通常將這段代碼寫入我的Web瀏覽器的JavaScript控制檯中,工作得非常快,如果需要繼續處理,可以很容易地進行修改。

  1. 複製/粘貼下面的腳本到您的瀏覽器控制檯(右鍵點擊此處 - >檢查元素),按下回車鍵

    (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 
    })() 
    
  2. 運行您的SWIFT/OBJ-C代碼,放在一個斷點和檢查NSData對象

    let sample = "Hello there" 
    let data = sample.dataUsingEncoding(NSUTF8StringEncoding) 
    // Put breakpoint here, hover over "data", and press the eye/i 
    
  3. 複製十六進制(像<48656c6c 6f207468 657265>),並粘貼到瀏覽器的提示

  4. 控制檯即可顯示的字符串:「你好」

最近,這是檢查從NSAttributedString.dataFromRange產量,RTFD用有點不同的編碼,但我得到了我需要的東西:)對於一些JSON的轉換問題也很有用,等

祝你好運:)

+0

這值得所有贊成票 –

+0

Thx @CoryImdieke!很高興它幫助:) –