2010-01-23 24 views
46

ho la seguente stringa ...NSURL URLWithString: è nullo con i caratteri accentati non inglesi

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

noti che ha alcuni caratteri accentati. Quando provo a trasformarla in un URL l'URL restituito è nullo ...

[NSURL URLWithString:googleSearchString]; 

Quindi normalmente le opere url eccetto quando ci sono accentati caratteri non inglesi nella stringa. Qualche aiuto su come gestirlo?

risposta

68

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

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

che funziona! Grazie per la risposta. Avevo appena trovato la funzione CFURLCreateStringByAddingPercentEscapes() anche così avrebbe fatto il lavoro. – regulus6633

+1

Vale la pena notare, questo sicuramente gestirà i tuoi caratteri stranieri, ma non gestirà correttamente caratteri non-lettera come + o /. NSString non ha alcuna funzione incorporata che faccia veramente la codifica dell'URL, ma questo funziona per caratteri estesi. – clee

+1

Domanda: per gli URL Web ... Se si utilizza NSASCIIStringEncoding o NSUTF8StringEncoding – regulus6633

-1

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

7

Utilizzando Swift 2,2

Per sfuggire non inglesi caratteri, ad esempio: di effettuare una richiesta URL fare:

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

Qui urlPath è uno Optional e path è l'URL originale (quello con caratteri non inglesi)

0

Nel metodo 2k16, stringByAddingPercentEscapesUsingEncoding: è deprecato e non è possibile evitarlo correttamente. Quando l'URL è predefinito, utilizza solo la stringa codificata del browser, poiché il metodo stringByAddingPercentEncodingWithAllowedCharacters: non può sfuggire all'intero URL.

1

Usare questo per SWIFT 4:

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