加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – NSURL为null,而NSString在Objective-C中是正确的

发布时间:2020-12-14 19:33:09 所属栏目:百科 来源:网络整理
导读:我有一个包含url的NSString,当我使用NSString分配NSURL时,NSURL输出(null).这是因为url中存在一些非法字符,如果不对包含url的NSString进行编码,则NSURL无法读取. NSString *u = [incomingUrlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8Stri
我有一个包含url的NSString,当我使用NSString分配NSURL时,NSURL输出(null).这是因为url中存在一些非法字符,如果不对包含url的NSString进行编码,则NSURL无法读取.

NSString *u = [incomingUrlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:u];

NSLog(@"INCOMINGURLSTRING: %@",u);
NSLog(@"URL: %@",url);

输出是:

INCOMINGURLSTRING: /url/path/fileName_bl?.pdf
 URL: (null)

incomingUrlString包含挪威语字母“?”,我认为这是NSURL的原因(null)

我也试过这个:

NSString *trimmedString = [file stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)trimmedString,NULL,(CFStringRef)@"!*'"();:@&=+$,/?%#[]% ",kCFStringEncodingUTF8);

NSLog(@"TRIMMEDSTRING: %@",trimmedString);
NSLog(@"ENCODEDSTRING: %@",[encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);

NSURL *url = [NSURL URLWithString:encodedString];

NSLog(@"URL: %@",url);

这里的输出是:

TRIMMEDSTRING: /url/path/fileName_bl?.pdf
 ENCODEDSTRING: /url/path/fileName_bl?.pdf
 URL: %2Furl%2FPath%2FfileName_bl%C3%A5.pdf

我的目标是将URL加载到UIWebView中.它适用于除此之外的所有其他传入URL,除文件名外,它们看起来都相同.这是唯一一个涉及非法角色的人.但是我必须找到一种方法对其进行编码,因为将来会有更多的文件包含“?”,“?”或“?”.

根据网址标准,我知道输出看起来不正确,我是故意做的.由于安全原因,我无法用http://blah blah显示正确的URL.

有人可以帮忙吗?

解决方法

您用于对字符串中的字符进行百分比编码的方法也会转义合法的URL字符.如果你编码一个URL参数,这是合适的,在这种情况下,虽然最好简单地使用stringByAddingPercentEscapesUsingEncoding:因为它保留了作为URL结构(‘:’,’/’等)一部分的字符完好无损:

NSString *u = @"http://example/path/fileName_bl?.pdf";
u = [u stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:u];
NSLog(@"%@",url); // http://example.com/path/fileName_bl%C3%A5.pdf

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读