I can't decode data from HTML page in swift

886 Views Asked by At

I am trying to decode data from an HTML page to be readable but the urlContent String is nil even though data returned from the NSURlSession is non-nil.

My implementation:

var city = "London" 
var url = NSURL(string: "https://www.google.com/#safe=off&q=weather+in+" + city.stringByReplacingOccurrencesOfString(" ", withString: "+"))

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data , response, error) -> Void in
                var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as NSString!
                println(urlContent)
})
2

There are 2 best solutions below

0
On

data is an optional NSData (or "NSData?"). You have to unwrap it.

Update: I switched to NSASCIIStringEncoding (from NSUTF8StringEncoding) as Eric D. pointed out. I also updated the code for Swift 2.

This works for me:

let city = "London"
let url = NSURL(string: "https://www.google.com/#safe=off&q=weather+in+" + city.stringByReplacingOccurrencesOfString(" ", withString: "+"))

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data , response, error) -> Void in
    if let data = data,
        urlContent = NSString(data: data, encoding: NSASCIIStringEncoding) {
        print(urlContent)
    } else {
        print("Error: \(error)")
    }
})

task.resume()
0
On

Aaron Brager's answer would usually work, but in this specific case, because of the encoding server-side, you have to decode the HTML with NSASCIIStringEncoding instead of NSUTF8StringEncoding.

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data , response, error) -> Void in
    if let data = data {
        var urlContent = NSString(data: data, encoding: NSASCIIStringEncoding)
        println(urlContent)
    } else {
        println("Error: \(error)")
    }
})
task.resume()