美文网首页
iOS URL中含有中文和转义字符时的处理

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

作者: 樱木艾克 | 来源:发表于2015-12-09 19:07 被阅读5746次

发现一个蛋疼的问题,如果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);

相关文章

网友评论

      本文标题:iOS URL中含有中文和转义字符时的处理

      本文链接:https://www.haomeiwen.com/subject/knzehttx.html