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