一、背景需求
有时候我们在项目中经常会遇到一个URL字符串转成NSURL之后为空,或者将URL字符串转成NSURL之后,请求数据是请求不到的,这个问题很有可能是URL字符串的编码解码问题。其中很常见的是GET请求中拼接字符串的时候其中含有中文。
二、问题解决
这个问题系统已经有API,我们看下系统实现
iOS9之前用的方法
- 编码
[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - 解码
[urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
其中urlString是我们给定的URL字符串
iOS9之后系统推荐使用
- 编码
[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]; - 解码
[urlString stringByRemovingPercentEncoding];
对于NSCharacterSet有问题的可参考NSCharacterSet
其中以下是有关于转换的特殊字符,我们根据需要选择合适的AllowedCharacterSet
URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
URLHostAllowedCharacterSet "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
URLUserAllowedCharacterSet "#%/:<>?@[\]^`
三、使用效果
NSString *urlString3 = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1493299941944&di=76092dbeceb09618622fd7993510c9fb&imgtype=0&src=http%3A%2F%2Fmvimg1.meitudata.com%2F55e2b8683d7464031.jpg";
NSString *url = [urlString3 stringByRemovingPercentEncoding];
NSLog(@"%@",url);
以上!!!