iOS中文网址路径转换
1.在网址路径里出现中文,使用
方法1:url编码
NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
url解码
NSString *str = [ss stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
方法2:
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);
如果其中含有已转义的%等符号时,又会再次转义而导致错误,使用方法:
NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8)); return encodedString;
此时encodedString就是转换后的网址。
2.使用类别的方式来使程序便得简洁
<1>.定义类别,如名字为URL(创建工程为类别,继承自NSString,命名为URL,会生成名字为NSString+URL的.h和.m文件)
<2>.在.h文件中创建方法 - (NSString *)urlEncodedString;
<3>.在.m文件中实现(ARC)
- (NSString *)urlEncodedString { NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8)); return encodedString; }
若是MRC,可使用
- (NSString *)urlEncodedString { NSString *encodedString = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"),kCFStringEncodingUTF8); return encodedString; }
<4>.调用时直接使用
NSString *urlString = [urlStr urlEncodedString];
生成的urlString就是转换后的地址
在头文件#import "NSString+URL.h"即可调用