我使用此代码发送HEAD请求以仅获取标题:
NSURL *url = [[webview request] URL];
NSMutableURLRequest *re = [NSMutableURLRequest requestWithURL:url];
[re setHTTPMethod:@"HEAD"];
[NSURLConnection connectionWithRequest:re delegate:self];
在回复中,我得到了标题:
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSDictionary *f = [(NSHTTPURLResponse*)httpResponse allHeaderFields];
NSString *content_Disposition = [f valueForKey:@"Content-Disposition"];
}
问题是,如果我记录NSDictionary
,我会将其作为ontent-Disposition
:
"Content-Disposition" = "attachment; filename=\"\U00e3\U00e5\U00e3\U00e5 \U00e8\U00f1\U00e4-\U00e0\U00e9\U00e6\U00e4 \U00e9\U00e5\U00ed.mp3\"";
但在NSString *content_Disposition
我得到:
attachment; filename="ãåãå èñä-àéæä éåí.mp3"
我如何将它转换为好的字符串,而不是我得到的?
答案 0 :(得分:1)
试试这个:
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSDictionary *f = [(NSHTTPURLResponse*)httpResponse allHeaderFields];
NSString *content_Disposition = [f valueForKey:@"Content-Disposition"];
char cString[] = content_Disposition;
NSData *data = [NSData dataWithBytes:cString length:strlen(cString)];
NSString *content_Formatted = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"content formatted: %@", content_Formatted);
}
更新
要获取文件名,您可以执行以下操作:
NSString *content_Disposition = [f valueForKey:@"Content-Disposition"];
NSRange rangeInit = [content_Disposition rangeOfString:@"filename="];
if (rangeInit.location != NSNotFound && rangeInit.length != NSNotFound) {
int fileNameInit = rangeInit.location + rangeInit.length;
NSRange rangeEnd = [content_Disposition rangeOfString:@" " options:NSLiteralSearch range:NSMakeRange(fileNameInit, [content_Disposition length] - fileNameInit)];
int fileNameLength = 0;
if (rangeEnd.location != NSNotFound && rangeEnd.length != NSNotFound) {
fileNameLength = rangeEnd.location - fileNameInit;
} else {
fileNameLength = [content_Disposition length] - fileNameInit;
}
NSString *nameFile = [content_Disposition substringWithRange:NSMakeRange(fileNameInit, fileNameLength)];
}