51 votes

NSURL URLWithString : est nul avec des caractères non accentués en anglais

J'ai la chaîne suivante...

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

Remarquez qu'il y a des caractères accentués. Quand j'essaie de transformer cela en url, l'url renvoyée est nulle...

[NSURL URLWithString:googleSearchString];

Normalement, l'URL fonctionne, sauf lorsque la chaîne contient des caractères accentués non anglais. Une aide sur la façon de gérer cela ?

73voto

clee Points 5565

Vous devez échapper les caractères spéciaux pour que cela fonctionne correctement. Quelque chose comme :

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

1 votes

Ça marche ! Merci pour la réponse. Je venais de trouver la fonction CFURLCreateStringByAddingPercentEscapes() également, donc l'une ou l'autre ferait l'affaire.

1 votes

Il convient de noter que cette fonction traitera les caractères étrangers, mais pas les caractères non alphabétiques comme + ou /. NSString n'a pas de fonction intégrée permettant de coder correctement les URL, mais celle-ci fonctionne pour les caractères étendus.

1 votes

Question : pour les urls web... Faut-il utiliser NSASCIIStringEncoding ou NSUTF8StringEncoding ?

11voto

Maksim Kniazev Points 2097

Utilisez ceci pour SWIFT 4 :

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

7voto

Hugo Alonso Points 3841

Utilisation de Swift 2.2

Pour s'échapper non-anglais des 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 originale (celle avec des caractères non anglais)

1voto

Timur Bernikowich Points 328

Dans la méthode 2k16 stringByAddingPercentEscapesUsingEncoding: est déprécié et il n'y a aucun moyen d'y échapper correctement. Lorsque l'URL est prédéfinie, il suffit d'utiliser la chaîne de caractères encodée par le navigateur. stringByAddingPercentEncodingWithAllowedCharacters: ne peut pas échapper à l'ensemble de l'URL.

-1voto

Martin Jacob Points 63

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X