NSURL URLWithString: é nulo com caracteres acentuados não ingleses

Eu tenho a seguinte string …

NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22"; 

Observe que tem alguns caracteres acentuados. Quando tento transformar isso em url, o URL retornado é nulo …

 [NSURL URLWithString:googleSearchString]; 

Normalmente, o URL funciona, exceto quando há caracteres não-ingleses acentuados na string. Alguma ajuda sobre como lidar com isso?

Você precisa escaping dos caracteres especiais para funcionar corretamente. Algo como:

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

Usando o Swift 2.2

Para caracteres que não são em inglês , por exemplo: para fazer uma solicitação de URL, faça:

let urlPath = path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

Aqui urlPath é um Optional e o path é o seu URL original (aquele com caracteres não ingleses)

Use isso para SWIFT 4:

 let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) let myURL = URL(string: url) 

No método stringByAddingPercentEscapesUsingEncoding: está obsoleto e não há como escaping disso corretamente. Quando a URL é predefinida, basta usar a string codificada do navegador, porque o método stringByAddingPercentEncodingWithAllowedCharacters: não pode escaping da URL inteira.

Algumas vezes, um espaço no URL pode causar esse problema.