2010-01-23 21 views
46

je la chaîne suivante ...NSURL URLWithString: est nul avec les caractères accentués non-anglais

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

avis qu'il a des caractères accentués. Lorsque je tente de le transformer en une url l'URL retournée est null ...

[NSURL URLWithString:googleSearchString]; 

Donc, normalement, les travaux d'URL, sauf quand il y a des caractères accentués non-anglais dans la chaîne. Toute aide sur la façon de gérer cela?

Répondre

68

Vous devez échapper les caractères spéciaux pour le faire fonctionner correctement. Quelque chose comme:

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

qui fonctionne! Merci d'avoir répondu. Je venais juste de trouver la fonction CFURLCreateStringByAddingPercentEscapes() pour que l'une ou l'autre fasse le travail. – regulus6633

+1

Il est à noter, cela va certainement gérer vos caractères étrangers, mais il ne traitera pas correctement les caractères non-lettre comme + ou /. NSString n'a aucune fonction intégrée qui code correctement l'URL, mais celle-ci fonctionne pour les caractères étendus. – clee

+1

Question: pour les urls web ... Si vous utilisez NSASCIIStringEncoding ou NSUTF8StringEncoding – regulus6633

-1

Parfois, un espace dans l'URL peut causer ce problème.

7

utilisant Swift 2,2

Pour échapper à non anglais caractères, par exemple: pour faire une demande d'URL faire:

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

Ici urlPath est un Optional et path est votre URL d'origine (celle avec des caractères non anglais)

0

Dans 2k16 la méthode stringByAddingPercentEscapesUsingEncoding: est obsolète et il n'y a aucun moyen d'y échapper correctement. Lorsque l'URL est prédéfinie, utilisez la chaîne encodée par le navigateur car la méthode stringByAddingPercentEncodingWithAllowedCharacters: ne peut pas échapper l'URL complète.

1

Utilisez ce pour SWIFT 4:

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