objective-c中的URL解码

时间:2012-09-24 12:04:36

标签: objective-c ios cocoa-touch

我有一个名为url的字符串,即

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

现在我正在下载这首歌并保存这个我需要指定文件名。我想要这样的文件名,它应该从这个url中的url.like获取文件名本身,它应该需要{{1}这是url中的文件名,但不应包含Url格式化程序。

我正在做的是

%5BSongs.PK%5D%20
                  Barfi%20-%2001%20-%20Barfi!.mp3

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

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

请注意,如果内容是动态的(例如http://example.com/getsong?q=foobar之类的内容),则无法始终仅从网址获取有用的文件名。

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