如何从包含国际字符的String中准备NSURL?

时间:2010-08-05 20:08:25

标签: iphone nsstring nsurl

我必须使用带有国际字符的GET访问Web服务器(在我的情况下是希伯来语,但可以是任何东西)。 所以我做了NSString就好了,但是

[NSURL URLWithString:urlString]; // returns nil.

我意识到我可能必须将国际字符转换为百分比代码。

Objective-c中是否有内置方法来执行此操作?

4 个答案:

答案 0 :(得分:10)

是的,你需要-stringByAddingPercentEscapesUsingEncoding:方法:

[NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

答案 1 :(得分:0)

由于NSURL *url中的nil,这会确保"|"不会返回urlString

NSString *urlString = [[NSString stringWithFormat:@"http://api.service.com/Service.svc?sort=name|ascending"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

答案 2 :(得分:0)

您可以在没有NSURL的情况下直接使用NSString

//.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]];

只需将NSURL从另一个视图(使用NewsUrl变量)传递到此视图。

答案 3 :(得分:0)

+ (NSURL*) URLWithStringWithSpecialChars:(NSString *)sURL
{
    NSURL *url = [NSURL URLWithString:sURL];
    if(url == nil)
        return [NSURL URLWithString:[sURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    else
        return url;
}

调用此函数而不是URLWithString:应确保始终返回有效的NSURL(而不是在需要时返回nil)