我想解析一个CSV文件以创建一个字符串。
我使用 Dropbox API 获取数据。假设我的CSV文件包含一个简单的单词:"école"。当我尝试创建字符串时,出现错误: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编码应该支持特殊字符不是吗?
这意味着您的数据是用其他代码编码的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))