URLWithString 返回 nil

+ (nullable instancetype)URLWithString:(NSString *)URLString;在将 NSString 类型的数据转换成 NSUrl类型的时候这个方法是最常用的一个。

一般情况下,该方法都能返回我们需要的内容,比如:[NSURL URLWithString:@"https://www.baidu.com"];

我们的项目中有个自定义的网络请求URL,类似这种:@“123456”,6位数的数字,我们会对这种URL进行拦截处理。最近有一个崩溃是因为后台传了一个这样的数据:@"600332"(注意和@"600332"的区别),刚开始我还以为是数字中间插入了空格,把数据复制处理一看才发现不是这样,服务器返回的是全角字符串——相当于返回的是中文。

将字符串转换成URL时,字符串中的中文、特殊符号&%和空格都必须进行转译才能正确访问。

如何转:

方法一:

NSString *str = @"600332";    

NSString *webStr = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];

//转换后的 webStr = %EF%BC%96%EF%BC%90%EF%BC%90%EF%BC%93%EF%BC%93%EF%BC%92

  • 通过该方法转码的字符串满足了 NSURL 对传入参数的要求。
  • 在外面的需求中,后面还是要用到 600332 这几个数字,故在外面项目中不可用。

方法二:

NSString * string = @"abcdefg,";//600332
    
NSMutableString *convertedString = [string mutableCopy];
    
CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, false);
    
  • 该方法能将全角(中文)的字母、符合、数字转换成半角的,但是如果这里面有中文汉字,汉字部分是不能转的。
  • 在我们的项目中,只需要把全角数字转成半角数字,该方法可行。

方法三:

NSString *urlStr = @"600332";
urlStr = [NSString stringWithFormat:@"%d,[urlStr intValue]];
NSURL * url = [NSURL URLWithString:urlStr];

  • 通过对字符串取值,然后再拼装成正常的字符串,曲线达成目标。
  • 该方法只适用于我们项目当前的需求。

参考文章:

https://www.cnblogs.com/Doule/p/6567418.html

你可能感兴趣的:(URLWithString 返回 nil)