web-dev-qa-db-fra.com

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

J'ai la chaîne suivante ...

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

Notez qu'il a des caractères accentués. Lorsque j'essaie de transformer cela en une URL, l'URL renvoyée est nulle ...

[NSURL URLWithString:googleSearchString];

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

46
regulus6633

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

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

Utilisation de Swift 2.2

Pour échapper des caractères non-english , par exemple: pour faire une demande d'URL do:

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

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

7
Hugo Alonso

Utilisez ceci pour Swift 4:

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

Dans la méthode 2k16, stringByAddingPercentEscapesUsingEncoding: est obsolète et il n’est pas possible de l’échapper correctement. Lorsque l'URL est prédéfinie, utilisez simplement la chaîne codée par le navigateur, car la méthode stringByAddingPercentEncodingWithAllowedCharacters: ne peut pas échapper à l'URL complète.

0
Timur Bernikovich