为什么下面的代码会成功返回数据,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()
}
答案 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)
}
}
})
希望它有所帮助。