详细解析几个和网络请求有关的类(七) —— URL数据的编码和解
版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.03.11 |
前言
我们做APP发起网络请求,一般都是使用框架,这些框架的底层也都是苹果的API,接下来几篇就一起来看一下和网络有关的几个类。感兴趣的可以看上面几篇文章。
1. 详细解析几个和网络请求有关的类 (一) —— NSURLSession
2. 详细解析几个和网络请求有关的类(二) —— NSURLRequest和NSMutableURLRequest
3. 详细解析几个和网络请求有关的类(三) —— NSURLConnection
4. 详细解析几个和网络请求有关的类(四) —— NSURLSession和NSURLConnection的区别
5. 详细解析几个和网络请求有关的类(五) —— 关于NSURL加载系统(一)
6. 详细解析几个和网络请求有关的类(六) —— 使用NSURLSession(二)
回顾
上一篇主要描述了NSURLSession的使用,这一篇主要说一下URL数据的编码和解码。
Encoding and Decoding URL Data - URL数据的编码和解码
要对URL字符串的一部分进行百分比编码,请使用NSString方法stringByAddingPercentEncodingWithAllowedCharacters:,为URL组件或子组件传递适当的字符集:
-
User
: URLUserAllowedCharacterSet -
Password
:URLPasswordAllowedCharacterSet -
Host
:URLHostAllowedCharacterSet -
Path
:URLPathAllowedCharacterSet -
Fragment
:URLFragmentAllowedCharacterSet -
Query
:URLQueryAllowedCharacterSet
重要提示:请勿使用
stringByAddingPercentEncodingWithAllowedCharacters:
对整个URL字符串进行编码,因为每个URL组件或子组件对于哪些字符有效具有不同的规则。
例如,要将包含在URL片段中的UTF-8字符串进行百分比编码,请执行以下操作:
NSString *originalString = @"color-#708090";
NSCharacterSet *allowedCharacters = [NSCharacterSet URLFragmentAllowedCharacterSet];
NSString *percentEncodedString = [originalString stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
NSLog(@"%@", percentEncodedString"); // prints "color-%23708090"
let originalString = "color-#708090"
let allowedCharacters = NSCharacterSet.urlFragmentAllowed
let encodedString = originalString.addingPercentEncoding(withAllowedCharacters: allowedCharacters)
print(encodedString!) // prints "color-%23708090"
如果要解码百分比编码的URL组件,请使用 NSURLComponents将URL拆分为其组成部分并访问相应的属性。
例如,要获取百分比编码的URL片段的UTF-8字符串值,请执行以下操作:
NSURL *URL = [NSURL URLWithString:@"https://example.com/#color-%23708090"];
NSURLComponents *components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:NO];
NSString *fragment = components.fragment;
NSLog(@"%@", fragment); // prints "color-#708090"
let url = URL(string: "https://example.com/#color-%23708090")!
let components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
let fragment = components.fragment!
print(fragment) // prints "color-#708090"
后记
本篇主要讲述了URL数据的编码和解码。