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

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

  • UrlEncode方法
    把任何参数转换成适合放在URL中的字符串。具体规则:
  1. 字母,数字,连字符不变。
  2. 空格转换成加号
  3. 其他所有的字符转换成用百分号表示,并接上字符的两位十六进制编码。如%2F
  • UrlDecode方法
    其功能与编码相反

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];

即可。

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 13,905评论 12 197
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,239评论 25 709
  • 含精华 编,0 篇文章,0 人关注 大家好,我是来自湖南浏阳的自由清风。 现在是思涵系统超成梦小组的,我的领导人是...
    自由清风616075阅读 1,171评论 0 0
  • 2016年就快要结束了,好久没写简书了,这次就在这里盘点一下今年看的书吧,今年看了八十几本书,离原定的100本的目...
    飞巴阅读 3,434评论 2 3

友情链接更多精彩内容