URL完全编解码 和URL不完全编解码
2018-04-20 本文已影响62人
充满活力的早晨
今天重构推送,因为推送中获取的数据有可能是一个url。而这个url 中可能带有汉字。这样直接发送给UIWebView 的时候,UIWebView 是不认识的。因此就需要对url 进行编码。这里就需要注意了。这是对url编码还是对url中的中文编码。
这里我们拿
url = "https://baike.baidu.com/item/高度/33570"
举例。
URL 完全编码
+(NSString*)encodeString:(NSString*)unencodedString{
NSString *encodedString = (NSString *)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
}
测试代码
NSString *originalUrl = @"https://baike.baidu.com/item/高度/6108396";
originalUrl = [NSString encodeString:originalUrl];
NSLog(@"%@",originalUrl);
测试结果
https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%E9%AB%98%E5%BA%A6%2F6108396
对其他特殊符号也进行了编码!'();:@&=+$,/?%#[]*
URL 完全解码
其实解码相对简单了。有多种方式,我选择两种方式
+(NSString *)decodeString:(NSString*)encodedString{
NSString *decodedString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
(__bridge CFStringRef)encodedString,
CFSTR(""),
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
return decodedString;
}
测试代码
NSString *originalUrl = @"https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%E9%AB%98%E5%BA%A6%2F6108396";
originalUrl = [NSString decodeString:originalUrl];
NSLog(@"%@",originalUrl);
测试结果
https://baike.baidu.com/item/高度/6108396
或者直接用
NSString *originalUrl = @"https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%E9%AB%98%E5%BA%A6%2F6108396";
originalUrl = [originalUrl stringByRemovingPercentEncoding];
NSLog(@"%@",originalUrl);
结果同上。
URL 不完全编码
NSString *originalUrl = @"https://baike.baidu.com/item/高度/6108396";
NSCharacterSet *encodeUrlSet = [NSCharacterSet URLQueryAllowedCharacterSet];
NSString *encodeUrl = [originalUrl stringByAddingPercentEncodingWithAllowedCharacters:encodeUrlSet];
NSLog(@"%@", encodeUrl);
结果
从这里看,其实就是对中文编码了。对!'();:@&=+$,/?%#[]* 没有编码
URL 不完全解码
解码同URL 完全解码
总结
1.完全编码和不完全编码的区别就是对
!*'();:@&=+$,/?%#[]
字符是否进行编码。
2.解码不存在完全解码和不完全解码,都是可以解码的。