自定义编码方式(加密)

编码要求:
URI非保留字符"包括以下字符:字母(A-Z,a-z)、数字(0-9)、连字号(-)、点号(.)、下划线(_)、波浪线(~),算法实现如下:
//1. 将字符串转换成UTF-8编码的字节流
//2. 保留所有“URI非保留字符”原样不变
//3. 对其余字节做一次RFC 3986中规定的百分号编码(Percent-encoding),即一个“%”后面跟着两个表示该字节值的十六进制字母,字母一律采用大写形式。

在iOS中没有直接的方法可以调用,但是可以通过其他方法拼接组合而成:
1、先筛选不需要处理的字符串,直接拼接;
2、需要处理的字符串使用iOS方法CFBridgingRelease处理
3、拼接完整的字符串

- (NSString *)urlEncode:(NSString *)string
{
    if (!string)
    {
        return @"";
    }
    
    //选择是否转换字符串
    NSString *saveStr = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-._~";//保留字符
    NSMutableString *mtbStr = [NSMutableString string];
    NSString *str;
    
    for (int i = 0; i < string.length; i ++)
    {
        str = [string substringWithRange:NSMakeRange(i, 1)];
        
        if ([saveStr rangeOfString:str].location != NSNotFound)
        {
            [mtbStr appendString:str];
        }
        else
        {
            [mtbStr appendString:[self fixString:str]];
        }
    }
    
    return [NSString stringWithString:mtbStr];
}

//转换字符串
- (NSString *)fixString:(NSString *)str
{
    return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes
                      (NULL,
                       (__bridge CFStringRef)str,
                       NULL,
                       (CFStringRef)@":/?#[]@!$&’()*+,;='",//需要处理的符号
                       CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}

你可能感兴趣的:(自定义编码方式(加密))