+ (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];
- 通过对字符串取值,然后再拼装成正常的字符串,曲线达成目标。
- 该方法只适用于我们项目当前的需求。
参考文章:
网友评论