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

在网络访问中,通常是实用[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;
}

你可能感兴趣的:(含有中文的网络路径转码解决方法)