自定义编码方式(加密)

编码要求:
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)));
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容