2015-05-10 5 views
9

Мое приложение использует NSURL так:Как использовать специальный символ в NSURL?

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

Когда я попытался сделать задачу для получения данных из этого NSURL, как это:

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") 
     } 

, но я получил сообщение об ошибке при попытке получили данные из этого адреса, хотя, когда я использую сафари, перейдите по ссылке: «http://www.geonames.org/search.html?q = Aïn + Béïda + Algeria & country =« Я вижу данные. Как я могу это исправить?

ответ

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) 
} 

закодированные URL теперь:

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

и совместим с NSURLSession.

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

почему 'URLFragmentAllowedCharacterSet'? существует также 'URLHostAllowedCharacterSet',' URLPasswordAllowedCharacterSet', 'URLPathAllowedCharacterSet',' URLQueryAllowedCharacterSet' и 'URLUserAllowedCharacterSet' – fabb

+0

@fabb Я мог бы использовать URLQueryAllowedCharacterSet с тем же эффектом, оба набора завершены. Другие наборы символов URL являются подмножествами этих двух. – Moritz

+0

благодарит за информацию. У вас есть источник этой информации? – fabb