在objective-c中解码URL

我有一个名为url ie的string

NSString *url = @"http://sound17.mp3pk.com/indian/barfi/%5BSongs.PK%5D%20 Barfi%20-%2001%20-%20Barfi!.mp3"; 

现在我正在下载这首歌曲,并保存这个我需要指定文件名。我想这样的文件名,它应该从这个URL的url.like文件名本身,它应该采取%5BSongs.PK%5D%20 Barfi%20-%2001%20-%20Barfi!.mp3这是url中的文件名,但不应该由Url格式化程序组成。

我在做什么

 Dest_path=[NSHomeDirectory() stringByAppendingString:@"/Documents/a3"]; result =[Dest_path stringByAppendingString:@".mp3"]; helper = [DownloadHelper download:url withTargetPath:result withDelegate:self]; 

像这样的东西应该工作:

 NSString *URLString = @"http://sound17.mp3pk.com/indian/barfi/%5BSongs.PK%5D%20Barfi%20-%2001%20-%20Barfi!.mp3"; NSURL *URL = [NSURL URLWithString:url]; NSString *filename = [[[URL path] lastPathComponent] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //=> [Songs.PK] Barfi - 01 - Barfi!.mp3 

请注意,如果内容是dynamic的(例如http://example.com/getsong?q=foobar ),则不能总是从URL中获取有用的文件名。

编辑:从任意URL获取文件名的更好方法是发出请求并检查响应的Content-Disposition HTTP标头 。