您的当前位置:首页正文

URL完全编解码 和URL不完全编解码

来源:要发发知识网

今天重构推送,因为推送中获取的数据有可能是一个url。而这个url 中可能带有汉字。这样直接发送给UIWebView 的时候,UIWebView 是不认识的。因此就需要对url 进行编码。这里就需要注意了。这是对url编码还是对url中的中文编码。

这里我们拿

URL 完全编码

+(NSString*)encodeString:(NSString*)unencodedString{
    NSString *encodedString = (NSString *)
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)unencodedString,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                            kCFStringEncodingUTF8));
    return encodedString;
}

测试代码

    NSString *originalUrl = 
        originalUrl = [NSString encodeString:originalUrl];
        NSLog(@"%@",originalUrl);

测试结果

URL 完全解码

其实解码相对简单了。有多种方式,我选择两种方式

+(NSString *)decodeString:(NSString*)encodedString{
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                                                                                     (__bridge CFStringRef)encodedString,
                                                                                                                     CFSTR(""),
                                                                                                                     CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

测试代码

 NSString *originalUrl = 
        originalUrl = [NSString decodeString:originalUrl];
        NSLog(@"%@",originalUrl);

测试结果

 NSString *originalUrl = 
        originalUrl = [originalUrl stringByRemovingPercentEncoding];
  NSLog(@"%@",originalUrl);

结果同上。

URL 不完全编码

       NSString *originalUrl = 
        NSCharacterSet *encodeUrlSet = [NSCharacterSet URLQueryAllowedCharacterSet];
        NSString *encodeUrl = [originalUrl stringByAddingPercentEncodingWithAllowedCharacters:encodeUrlSet];
  NSLog(@"%@", encodeUrl);

结果

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

URL 不完全解码

解码同URL 完全解码

总结

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

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

字符是否进行编码。

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