Ответ 1
Да, вам нужен метод -stringByAddingPercentEscapesUsingEncoding:
:
[NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Мне нужно получить доступ к веб-серверу с помощью GET
с международными символами (иврит в моем случае, но может быть любым).
Поэтому я делаю NSString
просто отлично, но
[NSURL URLWithString:urlString]; // returns nil.
Я понимаю, что мне, вероятно, придется преобразовать международные символы в процентные коды.
Есть ли встроенный метод в Objective-c для этого?
Да, вам нужен метод -stringByAddingPercentEscapesUsingEncoding:
:
[NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Это обеспечило бы, что NSURL *url
не возвращает nil
из-за "|"
в urlString
.
NSString *urlString = [[NSString stringWithFormat:@"http://api.service.com/Service.svc?sort=name|ascending"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
Вы можете использовать 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
) в это представление.
+ (NSURL*) URLWithStringWithSpecialChars:(NSString *)sURL
{
NSURL *url = [NSURL URLWithString:sURL];
if(url == nil)
return [NSURL URLWithString:[sURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
else
return url;
}
вызов этой функции вместо URLWithString: должен гарантировать, что действительный NSURL всегда возвращается (вместо нулевого значения)