在iOS 9.0之后,以前常用的NSString
编码的方法stringByAddingPercentEscapesUsingEncoding:
被弃用了,项目中可能会出现一堆如下️:
'stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0 - Use -stringByAddingPercentEncodingWithAllowedCharacters: instead, which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid.
作为一个有强迫症的优秀程序猿,表示不能忍!
文档里面是这么说的:
- (nullable NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc
NS_DEPRECATED(10_0, 10_11, 2_0, 9_0, "Use -stringByAddingPercentEncodingWithAllowedCharacters: instead,
which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid.");
很明白,用stringByAddingPercentEncodingWithAllowedCharacters:
方法替换之。
这个方法官方文档是这么说的:
// Returns a new string made from the receiver by replacing all characters not in the allowedCharacters set with percent encoded characters. UTF-8 encoding is used to determine the correct percent encoded characters. Entire URL strings cannot be percent-encoded. This method is intended to percent-encode an URL component or subcomponent string, NOT the entire URL string. Any characters in allowedCharacters outside of the 7-bit ASCII range are ignored.
最后一句Any characters in allowedCharacters outside of the 7-bit ASCII range are ignored.
,意思就是说,任何非7-bit ASCII字符搁到allowedCharacters
里面也将被忽略,也就是allowedCharacters
里面的字符跟7-bit ASCII字符不会被编码。
换句话说,上面方法在处理的时候会编码url的中的非7-bit ASCII字符,如这些【`#%^{}"[]|\<>】,如果需要忽略之,需要通过(NSCharacterSet *)allowedCharacters
这个参数指定。总结如下
[aString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//等价于
[aString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "]];
注意:
- 字符集最后是一个空格!
- 这里字符集的意思就是,字符串中含有字符集里面的字符将不会被编码。
另外,URL中常用的NSCharacterSet
类型定义在分类NSCharacterSet (NSURLUtilities)
中,包含字符集如下:
URLHostAllowedCharacterSet "#%/<>?@\^`{|}
URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
URLUserAllowedCharacterSet "#%/:<>?@[\]^`
以上,还在等什么,全局搜索替换吧,消灭️!
喜欢我的可以关注收藏我的个人博客:RobberJJ