美文网首页iOS开发_周边
URLWithString 返回 nil

URLWithString 返回 nil

作者: lucky_frank | 来源:发表于2019-03-21 09:19 被阅读0次

    + (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

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