iOS開(kāi)發(fā)-OC中特殊字符串編碼解碼

寫(xiě)在前面:本文旨在解決OC中字符串的編碼解碼問(wèn)題,并非是HTML5或者其語(yǔ)言的轉(zhuǎn)碼問(wèn)題。

特殊字符編碼解碼

Foundation框架

- (NSString *)ocstringEncode:(NSString *)str {
    
    return [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\\]^`{|}\"]+"].invertedSet];

//    在對(duì)URL中的中文進(jìn)行轉(zhuǎn)碼時(shí),在iOS 9之前我們使用
//    [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//    在iOS 9之后使用:
//    [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];    

//    NSCharacterSet其他類方法的所代表的特殊字符串
//    URLFragmentAllowedCharacterSet  @"#%<>[\]^`{|}"
//    URLHostAllowedCharacterSet      @"#%/<>?@\^`{|}"
//    URLPasswordAllowedCharacterSet  @"#%/:<>?@[\]^`{|}"
//    URLPathAllowedCharacterSet      @"#%;<>?[\]^`{|}"
//    URLQueryAllowedCharacterSet     @"#%<>[\]^`{|}"
//    URLUserAllowedCharacterSet      @"#%/:<>?@[\]^`"

}

- (NSString *)ocstringDecode:(NSString *)str {

    return [str stringByRemovingPercentEncoding];
}

CoreFoundation框架,C語(yǔ)言

- (NSString *)stringEncode {
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), kCFStringEncodingUTF8));
    return encodedString;
}

- (NSString *)stringDecode {
    NSString *result = [(NSString *)self stringByReplacingOccurrencesOfString:@"+" withString:@" "];
    result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    return result;
}

特殊字符編碼解碼舉例

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSString *url = @"http://study.minshenglife.com:7100/api/v1/sso?openUser=2Xxad8F+IOEAHrt5K6Lm4w==&openPwd=/luuvx4Q0BQysuMKfE5dMA==曾仕林";
    NSString *str1 = [self ocstringEncode:url];
    NSString *str2 = [self ocstringDecode:str1];
    
    NSString *str3 = [self stringEncode:url];
    NSString *str4 = [self stringDecode:str3];
    NSLog(@"\n%@ \n%@ \n%@ \n%@",str1,str2,str3,str4);
}


- (NSString *)ocstringEncode:(NSString *)str {
    
    return [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\\]^`{|}\"]+"].invertedSet];
    
//    在對(duì)URL中的中文進(jìn)行轉(zhuǎn)碼時(shí),在iOS 9之前我們使用
//    [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//    在iOS 9之后使用:
//    [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    
}

- (NSString *)ocstringDecode:(NSString *)str {

    return [str stringByRemovingPercentEncoding];
}


- (NSString *)stringEncode:(NSString *)str {
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR("#%<>[\\]^`{|}\"]+"), kCFStringEncodingUTF8));
    return encodedString;
}

- (NSString *)stringDecode:(NSString *)str {
    NSString *result = [(NSString *)str stringByReplacingOccurrencesOfString:@"+" withString:@" "];
    result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    return result;
}

打印結(jié)果:


encode.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容