NSURL URLWithString: is null with non-english accented characters
-
22-09-2019 - |
Question
I have the following string...
NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22";
Notice that it has some accented characters. When I try to turn that into a url the returned url is null...
[NSURL URLWithString:googleSearchString];
So normally the url works except when there are accented non-english characters in the string. Any help on how to handle that?
Solution
You need to escape the special characters to make it work properly. Something like:
[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
OTHER TIPS
Using Swift 2.2
For escaping non-english characters, for example: to make an URL request do:
let urlPath = path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
Here urlPath
is an Optional
and path
is your original url (the one with non-english characters)
Use this for SWIFT 4:
let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let myURL = URL(string: url)
In 2k16 method stringByAddingPercentEscapesUsingEncoding:
is deprecated and there is no way escape this correctly. When URL is predefined just use browser encoded string, because stringByAddingPercentEncodingWithAllowedCharacters:
method cannot escape whole URL.
Some times a space in the url can cause this problem .