发现NSString类中有内置的方法可以实现。他们分别是:

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

       只要传入相应的编码即可以进行编码和解码了,不过此方法是对整个Url进行编码的所以如果有Query String中带有&?

示例:


[cpp]  view plain copy


1. NSString* string1 = @"https://www.cloudsafe.com/文件夹";  
2.       
3. NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
4. NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
5.       
6. NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
7. NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
8.       
9. NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
10. NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
11.       
12. 输出结果: string5 & 6 重复编码encode  
13.    
14. string1:https://www.cloudsafe.com/文件夹  
15.    
16. string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9  
17. string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9  
18.    
19. string4:https://www.cloudsafe.com/文件夹  
20. string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9  
21.    
22. string6:https://www.cloudsafe.com/文件夹  
23. string7:https://www.cloudsafe.com/文件夹