Печать 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...
Ответы
Ответ 1
Если вы это сделаете:
NSLog(@"%@", returnData);
NSData будет регистрироваться в шестнадцатеричном формате. Я думаю, что это, вероятно, то, что вам нужно.
Если вы хотите превратить его в строку и записать строку, сначала вам нужно выяснить, какой набор символов использовался. Набор символов по умолчанию для HTTP не UTF-8, это ISO-8859-1. Один из способов сделать это - изучить заголовок Content-Type
для раздела charset.
Ответ 2
Преобразование 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", вы получите кодировку отсюда.
Ответ 3
Вы тоже должны подумать:
NSLog(@"%@", *returnData); // this is wrong.
NSLog(@"%@", returnData); // this is correct.
Я надеюсь, что смогу помочь!
Ответ 4
Я несколько часто хочу видеть, что на самом деле представляют NSData. Обычно это какой-то текст, который делает шестым немного неудобным. Поэтому я обычно пишу этот фрагмент в консоли JavaScript в своем веб-браузере, работает довольно быстро и может быть легко изменен, если потребуется некоторая дальнейшая обработка.
-
Скопируйте/вставьте следующий script в консоль вашего браузера (щелкните правой кнопкой мыши здесь → Проверить элемент), нажмите 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
})()
-
Запустите свой код swift/obj-c, поставьте точку останова и проверьте свой объект NSDatap >
let sample = "Hello there"
let data = sample.dataUsingEncoding(NSUTF8StringEncoding)
// Put breakpoint here, hover over "data", and press the eye/i
-
Скопируйте шестнадцатеричный (что-то вроде <48656c6c 6f207468 657265>
) и вставьте в приглашение браузера
- Затем консоль отобразит строку: "Hello there"
Совсем недавно, чтобы проверить вывод из NSAttributedString.dataFromRange
, rtfd использовал бит различной кодировки, но я получил то, что мне нужно:) Также полезно для некоторых проблем преобразования json и т.д.
Удачи:)
Ответ 5
Отметьте этот ответ, если вам нужны ваши байты данных как строка
fooobar.com/info/114258/...