这可能很容易,但我似乎没有找出为什么URLWithString:
在这里返回nil。
//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName];
NSURL* url = [NSURL URLWithString:stringURL];
答案 0 :(得分:198)
您还需要转义硬编码网址中的非ASCII字符:
//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName];
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:webStringURL];
您可以删除localisationName的转义,因为它将通过转义整个字符串来处理。
答案 1 :(得分:39)
如果您处理保存在文件管理器上的文件,请使用此功能。
NSURL *_url = [NSURL fileURLWithPath:path];
答案 2 :(得分:8)
我猜您需要使用-[NSString stringByAddingPercentEscapesUsingEncoding:]
。请参阅Apple doc。
另一个评论是,作为旧计时器,我发现将非ASCII字符放在源文件中有点不安。
也就是说,这个Apple doc说,从10.4开始,@"..."
内的UTF-16字符串就可以了。
不知何故,GCC似乎正确地将Latin-1中的源文件转换为二进制文件中的UTF-16,但我认为使用它是最安全的
仅在源代码内部使用7位ASCII字符,并使用NSLocalizedString
。
答案 3 :(得分:2)
我认为你的重音人物正在抛弃它;它们不会被-stringByAddingPercentEscapesUsingEncoding处理:。
答案 4 :(得分:2)
NSURL URLWithString:如果网址不符合RFC 2396,则@“”将返回nil并且必须对其进行转义
如果您通过链接阅读rfc2396,您将获得大量详细信息
我找到了一个很棒的网站,用于检查违规字符的位置,选择网址
的路径选项答案 5 :(得分:0)
如果传递给它的字符串格式错误,则URLWithString:call将返回nil。 由于NSURL对格式错误的URL返回nil,因此NSLog您的字符串并设置断点以准确查看传递给NSURL创建方法的内容。如果您的URLWithString使用硬编码值,则可以进一步证明您传递的内容格式不正确。see
答案 6 :(得分:0)
更新:
由于stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
已被弃用,因此您应该使用stringByAddingPercentEncodingWithAllowedCharacters
[stringURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
这是根据您的情况设置的允许字符的列表。
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
参考:https://developer.apple.com/reference/foundation/nsstring/1411946-stringbyaddingpercentencodingwit
答案 7 :(得分:-1)
您可以在没有NSString的情况下直接使用NSURL。
//。h file
@interface NewsBrowser : UIViewController {
UIWebView *webView;
NSURL *NewsUrl;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property(nonatomic,assign)NSURL *NewsUrl;
@end
//。m file
[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]];
我将URL从另一个视图(使用NewsUrl变量)传递给此视图。
试试吧。