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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |