使用Swift通过session.dataTaskWithRequest()获取URL的内容 - 数据不会转换为NSString

时间:2014-11-18 14:36:13

标签: swift nsurlsession

为什么下面的代码会成功返回数据,statusCode为200,但无法将返回的NSData转换为NSString?

var session: NSURLSession

func init() {
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    session = NSURLSession(configuration: config)
}

func getStatic(url:NSURL) {
    let request = NSMutableURLRequest(URL: url)
    let dataTask = session.dataTaskWithRequest(request) {(data, response, error) in
        if error != nil {
            // handle error
        } else {
            // data has a length of 2523 - the contents at the url
            if let httpRes = response as? NSHTTPURLResponse {
                 // httpRes is 200
                 let html = NSString(data:data, encoding:NSUTF8StringEncoding)
                 // **** html is nil ****
             }
        }
    }
    dataTask.resume()
}

2 个答案:

答案 0 :(得分:4)

代码确实是正确的。

我尝试加载的网址包含非UTF8字符,因此NSString(data:data, encoding:NSUTF8StringEncoding)尝试的编码失败。

删除没有UTF8字符解决了问题。 或者为我的内容选择适当的编码NSISOLatin1StringEncoding也是有用的。

答案 1 :(得分:0)

看起来它应该没问题,至少对我来说。我只是涉足Swift,但我已经完成了我的外壳(不确定这是不是正确的名称)稍微改变如下。您是否尝试在if let httpRes = response as? NSHTTPURLResponse行之前将数据转换为NSString?也许数据变量实际上没有html。我编写的代码与下面的更改几乎完全相同,我可以成功地将数据转换为NSString。

let dataTask = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
    if error != nil {
        // handle error
    } else {
        if let httpRes = response as? NSHTTPURLResponse {
             let html = NSString(data:data, encoding:NSUTF8StringEncoding)
         }
    }
})

希望它有所帮助。