原字符串:
Vk/nQmguwJIN
编码之后:
Vk%2FnQmguwJIN
解码之后:
Vk/nQmguwJIN
编码
+(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;
}
建议自己写个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];
}
在调用处的类中
#import "NSString+URLEncoding.h"
然后,调用上述方法:
[testStr urlEncodeString];
即可。