如何确定URL是否应该被编码?

问题描述:

我使用URLs从互联网上下载,所以我不知道他们的格式提前,他们是动态的。如何确定URL是否应该被编码?

如何知道在运行时我应该编码URL

// `url` is retrieved from the Internet at run time 
// When should I call following line? 
let urlString = url!.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet()) 

如果它已经编码,调用stringByAddingPercentEncodingWithAllowedCharacters会使URL无效。

+0

你可以检查字符串,并作出一个广泛的假设,如果它包含'%'字符,它已经被编码? – Flexicoder

+2

URL必须始终正确编码。严格来说,没有像未经编码的URL那样的东西。您可以使用辅助类“NSURLComponents”验证URL是否有效。 – CouchDeveloper

+0

@CouchDeveloper它确实发生在非英文网址 –

使用:NSString *unencodedUrlString = [originalURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];来解码URL。现在比较解码版本和原始版本。如果它们相同,则url不会被编码,否则它已经被编码。

+1

如果任何解码的组件包含'%'字符,这将不起作用。 – CouchDeveloper