如何在iOS中进行URL解码 – Objective C

stringByReplacingPercentEscapesUsingEncoding方法工作不正常,因为它不解码不以%字符开头的特殊符号,即+字符。 有没有人知道更好的方法来做到这一点在iOS?

这是我目前使用的:

NSString *path = [@"path+with+spaces" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

这里是一个输出的例子:

path+与+空格

 NSString *path = [[@"path+with+spaces" stringByReplacingOccurrencesOfString:@"+" withString:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

请注意,加空间replace仅适用于application/x-www-form-urlencoded数据 – URL的查询string部分或POST请求的主体。

 // Decode a percent escape encoded string. - (NSString*) decodeFromPercentEscapeString:(NSString *) string { return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef) string, CFSTR(""), kCFStringEncodingUTF8); } 

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

这似乎是首选的方式,因为…“显然”这是一个“错误”苹果已经意识到,但他们还没有做任何事情呢…( http://simonwoodside.com/weblog/2009 / 4/22 / how_to_really_url_encode / )

如果您尝试用百分比换码replace加号,请执行从“+”到“”(单个空格)的stringreplace。 然后使用stringByAddingPercentEscapesUsingEncoding:来添加百分号转义。

加号是从不编码的许多保留的URL字符之一。

stringByReplacingPercentEscapesUsingEncoding:解码转义百分比)

迅捷2:

 extension String { func uriDecodedString() -> String? { return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding } }