美文网首页
URLWithString: 返回nil的问题+延伸

URLWithString: 返回nil的问题+延伸

作者: IUVO | 来源:发表于2019-10-14 15:34 被阅读0次

此次又遇到了 [NSURL URLWithString:url] 返回值为空的情况,做个笔记,别再忘了

一般而言,遇到[NSURL URLWithString:url]为空的情况,需要排查传入的字符串中是否带有中文,因为汉字或者空格等无法被识别,字符串不被认为是URLString,这个NSURL的值也就一直是nil,挺烦人的。

解决方案也简单:

第一种方法

url含有中文的解决方法


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

urlStr是url地址,拼接中含有中文。

第二种方法


// 在对URL中的中文进行转码时,iOS 9之前我们使用
 [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//编码
// iOS 9之后使用 
 [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//编码

其中URLQueryAllowedCharacterSet组件是可选的:

编码字符范围:
URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

以上为编码,
再来看看对应的解码。

解码:[@"编码后的字符串" stringByRemovingPercentEncoding];//解码

NSURL 转换字符串可以直接使用NSURL的属性absoluteString
例如上述的url,NSString * urlStr = url.absoluteString;

使用上面的方法无效,解决方法使用这个:

//urlEncode编码

NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";

NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];

NSString * stringUrl = [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];

//urlEncode解码

NSMutableString *outputStr = [NSMutableString stringWithString:input];

[outputStr replaceOccurrencesOfString:@"+" withString:@"" options:NSLiteralSearch range:NSMakeRange(0,[outputStr length])];

[outputStr stringByRemovingPercentEncoding];

编解码还是需要细心去处理的。

相关文章

网友评论

      本文标题:URLWithString: 返回nil的问题+延伸

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