含有中文的网络路径转码解决方法

在网络访问中,通常是实用[NSURL URLWithString:urlString]生成URL对象,然后取创建请求,发起网络链接,但是当给定的urlString里带有中文字符时,就不能正确进行网络请求,针对这样的情况,苹果也给出了相应的转码方法:

方法1:(此方法在iOS 9.0 过期)

NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- (nullable NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc NS_DEPRECATED(10_0, 10_11, 2_0, 9_0, )

方法2:(iOS 9.0以后的方法)

NSString* encodedString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
- (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters NS_AVAILABLE(10_9, 7_0);

但是这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.可以用以下方法解决,且可以写个分类以便项目中全局使用

- (NSString *)urlEncodedString {
NSString *encodedString = (NSString *)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                          (CFStringRef)self,
                                                          (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
                                                          NULL,
                                                          kCFStringEncodingUTF8));

return encodedString;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容