NSURL URLWithString: è null con caratteri accentati non inglesi

Ho la seguente stringa …

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

Si noti che ha alcuni caratteri accentati. Quando provo a trasformarlo in un URL, l’URL restituito è nullo …

 [NSURL URLWithString:googleSearchString]; 

Quindi normalmente l’url funziona tranne quando nella stringa sono presenti caratteri accentati non inglesi. Qualche aiuto su come gestirlo?

È necessario sfuggire ai caratteri speciali per farlo funzionare correttamente. Qualcosa di simile a:

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

Utilizzando Swift 2.2

Per l’escape di caratteri non inglesi , ad esempio: per fare una richiesta URL fai:

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

Qui urlPath è Optional e path è il tuo URL originale (quello con caratteri non inglesi)

Utilizzare questo per SWIFT 4:

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

Nel metodo stringByAddingPercentEscapesUsingEncoding: è deprecato e non c’è modo di stringByAddingPercentEscapesUsingEncoding: correttamente. Quando l’URL è predefinito, usa solo la stringa codificata del browser, perché stringByAddingPercentEncodingWithAllowedCharacters: metodo non può sfuggire all’intero URL.

Alcune volte uno spazio nell’URL può causare questo problema.