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);

结果

https://baike.baidu.com/item/%E9%AB%98%E5%BA%A6/6108396

从这里看,其实就是对中文编码了。对!'();:@&=+$,/?%#[]* 没有编码

URL 不完全解码

解码同URL 完全解码

总结

1.完全编码和不完全编码的区别就是对

!*'();:@&=+$,/?%#[]

字符是否进行编码。

2.解码不存在完全解码和不完全解码,都是可以解码的。

上一篇 下一篇

猜你喜欢

热点阅读