2015-05-10 6 views
9

Meine Anwendung wird unter Verwendung eines NSURL wie folgt aus:Wie verwendet man Sonderzeichen in NSURL?

var url = NSURL(string: "http://www.geonames.org/search.html?q=Aïn+Béïda+Algeria&country=") 

Als ich für das Erhalten von Daten aus dieser NSURL wie diese eine Aufgabe zu machen versucht:

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in 

     if error == nil { 

      var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) 
      println("urlContent \(urlContent!)") 
     } else { 

      println("error mode") 
     } 

aber ich habe Fehler bei dem Versuch, Daten zu bekommen von dieser Adresse, obwohl wenn ich Safari benutze, gehen Sie zum Link: "http://www.geonames.org/search.html?q = Aïn + Béïda + Algerien & country =" Ich kann die Daten sehen. Wie kann ich das beheben?

Antwort

32

Swift 2

let original = "http://www.geonames.org/search.html?q=Aïn+Béïda+Algeria&country=" 
if let encodedString = original.stringByAddingPercentEncodingWithAllowedCharacters(
    NSCharacterSet.URLFragmentAllowedCharacterSet()), 
    url = NSURL(string: encodedString) 
{ 
    print(url) 
} 

Codierte URL ist jetzt:

"http://www.geonames.org/search.html?q=A%C3%AFn+B%C3%A9%C3%AFda+Algeria&country="

und ist mit NSURLSession kompatibel.

Swift 3

let original = "http://www.geonames.org/search.html?q=Aïn+Béïda+Algeria&country=" 
if let encoded = original.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed), 
    let url = URL(string: encoded) 
{ 
    print(url) 
} 
+0

warum 'URLFragmentAllowedCharacterSet'? es gibt auch 'URLHostAllowedCharacterSet',' URLPasswordAllowedCharacterSet', 'URLPathAllowedCharacterSet',' URLQueryAllowedCharacterSet' und 'URLUserAllowedCharacterSet' – fabb

+0

@fabb Ich hätte URLQueryAllowedCharacterSet mit demselben Effekt verwenden können, beide Sets sind abgeschlossen. Die anderen URL-Zeichensätze sind Teilmengen dieser beiden. – Moritz

+0

danke für die Info. Hast du eine Quelle für diese Information? – fabb