OC进化iOS DeveloperiOS程序猿

iOS字符串编码与解码方法的实现与调用(UrlEncode/Ur

2017-06-04  本文已影响216人  小码僧

1.本编解码方法的功能说明

  1. 字母,数字,连字符不变。
  2. 空格转换成加号
  3. 其他所有的字符转换成用百分号表示,并接上字符的两位十六进制编码。如%2F

2. 字符串在编码之前之后的效果

原字符串:

Vk/nQmguwJIN

编码之后:

Vk%2FnQmguwJIN

解码之后:

Vk/nQmguwJIN

3.UrlEncode/UrlDecode方法的实现

编码

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

解码

//URLDEcode
+(NSString *)decodeString:(NSString*)encodedString

{
    //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
    
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

4.使用建议

建议自己写个Category。比如,可以基于NSString新建一个URLEncoding类别文件,类名分别为NSString+URLEncoding.h和NSString+URLEncoding.m。然后,在你需要的地方导入该头文件即可。作为对比,与上面的实现不同,下面采用replaceOccurrencesOfString:方法实现解码功能。

其中:
NSString+URLEncoding.h

#import <Foundation/Foundation.h>

@interface NSString (URLEncoding)

// 字符串转码
- (NSString*)urlEncodeString;

// 反URL编码
- (NSString *)decodeFromPercentEscapeString;

@end

NSString+URLEncoding.m

#import "NSString+URLEncoding.h"

@implementation NSString (URLEncoding)

// 字符串编码
- (NSString *)urlEncodeString
{
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’(){}<>*+,;="),kCFStringEncodingUTF8));
    return result;
}

// 反URL编码
- (NSString *)decodeFromPercentEscapeString
{
    NSMutableString *outputStr = [NSMutableString stringWithString:self];
    [outputStr replaceOccurrencesOfString:@"+"
                               withString:@" "
                                  options:NSLiteralSearch
                                    range:NSMakeRange(0, [outputStr length])];
    
    return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

5. 调用范例

在调用处的类中

#import "NSString+URLEncoding.h"

然后,调用上述方法:

[testStr urlEncodeString];

即可。

参考文献

上一篇下一篇

猜你喜欢

热点阅读