在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标头 。