NSString解码

时间:2014-02-25 09:19:49

标签: ios iphone objective-c

我使用此代码发送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"

我如何将它转换为好的字符串,而不是我得到的?

1 个答案:

答案 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)];

}