iOS URL中含有中文和转义字符时的处理

发现一个蛋疼的问题,如果urlString里面有时含有中文,使用 [NSURL URLWithString:urlString] 生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题.

方法1:

NSString *encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

方法2:

NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, NULL, NULL, kCFStringEncodingUTF8);

这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.查看方法2参数说明:

CFStringRefCFURLCreateStringByAddingPercentEscapes(CFAllocatorRefallocator, CFStringReforiginalString, CFStringRefcharactersToLeaveUnescaped, CFStringReflegalURLCharactersToBeEscaped, CFStringEncodingencoding);

因此做出修改,写出方法:

NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, (CFStringRef)@"!NULL,'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容