iOS macOS URL编码和解码过程(UrlEncode)
字符串URL编码实现
NSString *urlStr = @"你好0123456789abcxyzABCXYZ-_.~&!*'();:@&=+$,/?#[]% "; //方式一编码对比 NSString *encodingString = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"url编码1-1 = %@",encodingString); //方式二自定义字符集 ABC-_~.!*'();:@&=+ $,/?%#[] 编码对比 NSString *encodeStr2 = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlStr, NULL, (CFStringRef)@"ABC-_~.!*'();:=+ $,/?%#[]", kCFStringEncodingUTF8)); NSLog(@"url编码2-2 = %@",encodeStr2); //系统提供的枚举字符集,这些字符不需要 编译 NSString *encodeStr3 = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; NSLog(@"url编码3-1 = %@",encodeStr3); //自定义字符不需要编译的字符集,为空字符集,将所有字符用百分号编码 NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@""]; NSString *encodeStr4 = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:characterSet]; NSLog(@"url编码3-2 = %@",encodeStr4);
打印结果是:
网上常见的字符集枚举说明(供参考):
URLFragmentAllowedCharacterSet "#%<>[\]^`{|} URLHostAllowedCharacterSet "#%/<>?@\^`{|} URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|} URLPathAllowedCharacterSet "#%;<>?[\]^`{|} URLQueryAllowedCharacterSet "#%<>[\]^`{|} URLUserAllowedCharacterSet "#%/:<>?@[\]^`
字符串URL解码实现
//上段代码的结果为encodeStr3入参 NSString *decodedStr3 = [encodeStr3 stringByRemovingPercentEncoding]; NSLog(@"url编码3-1 = %@",decodedStr3); //上段代码的结果为encodeStr4入参 NSString *decodedStr4 = [encodeStr4 stringByRemovingPercentEncoding]; NSLog(@"url编码3-2 = %@",decodedStr4);
打印结果是
感谢转载的大神:https://blog.csdn.net/u014600626/article/details/127836395