我想解析一个CSV文件来创建一个String。
我使用Dropbox API获取数据。假设我的CSV文件包含一个简单的单词:“école”。当我尝试创建一个String时,我收到错误:fatal error: unexpectedly found nil while unwrapping an Optional value
。
我的代码:
client.files.download(path: "/\(selectedFile)", destination: destination).response { response, error in
if let (_, url) = response {
let data = NSData(contentsOfURL: url)
print("data: \(data!)")
let myString = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
let csv = CSwiftV(String: myString)
} else {
print(error!)
}
}
print("data: \(data!)")
效果很好,打印出一串十六进制。所以我理解我的数据不是零(对吧?)。
如果我的CSV文件中包含单词“ ecole ”而不是“école”,那么它的效果非常好。但据我所知,UTF-8编码应该支持特殊字符吗?
答案 0 :(得分:1)
这意味着您的数据使用其他代码进行编码,而NSUTF8StringEncoding
使用相同的编码对其进行解码
例如
let string = "école"
let data = string.dataUsingEncoding(NSUTF8StringEncoding)
let myString = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String //This is OK
let string = "école"
let data = string.dataUsingEncoding(NSUnicodeStringEncoding)
let myString = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String // This will not work and myString will be nil
请尽量避免强行打开(!),即使您确定自己有数据,因为下次使用时可能会发生崩溃!
我会这样做:
guard let data = NSData(contentsOfURL: url),
let myString = NSString(data: data, encoding: NSUTF8StringEncoding) else {
print("something terrible happened treat error")
}
let csv = CSwiftV(String: String(myString))