获取csv文件的内容时,以下内容返回nil。但是,将csv表减少到10行将正常工作,输出csv文件的内容。
原始csv有大约400,000个字符,分为500行和11列。是什么导致它与原始csv一起返回nil?
let dbPath = "/Volumes/Gios2TWD/myDB.csv"
var error: NSError?
let csvContent = NSString(contentsOfFile: dbPath, encoding:NSUTF8StringEncoding, error: &error) as String!
println(csvContent)
println(error)
我正在运行XCode版本6.1(6A1030)
错误:
可选(错误域= NSCocoaErrorDomain代码= 261"无法使用文本编码Unicode(UTF-8)打开文件“myDB.csv”。" UserInfo = 0x10050c5b0 {NSFilePath = / Volumes /Gios2TWD/myDB.csv,NSStringEncoding = 4})
答案 0 :(得分:10)
您需要用于测试错误的代码:
let dbPath = "/Volumes/Gios2TWD/myDB.csv"
var error: NSError?
let csvContent = NSString(contentsOfFile: dbPath, encoding:NSUTF8StringEncoding, error: &error)
if csvContent != nil {
// do something with the string
}
else {
println("error: \(error)")
}
然后尝试理解任何错误消息。如果您需要帮助,请将代码和完整错误消息发布到SO。
出现如下错误消息:"无法使用文本编码Unicode(UTF-8)打开#34;它不是UTF-8文件。文件中可能存在损坏,或许多是另一种格式。试试NSMacOSRomanStringEncoding
,这是一个非常宽容的8位ASCII编码。它也可能是另一种8位ASCII编码。
注意:除非你100%确定在任何情况下都不能为零,否则不要明确地解开东西。
答案 1 :(得分:2)
偶然发现了这个问题和Zaph的答案,建议使用NSMacOSRomanStringEnconding
,因为enconding确实解决了很多问题 - 在我的情况下,这是因为NSUTF8StringEnconding
引起问题的变音符号。
然而,我只是想添加最新的Swift语法,以防你想要捕获错误并正确处理
let csvContent: String?
do{
csvContent = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
// file could be read properly - do something with the content ...
} catch {
let nsError = error as NSError
print(nsError.localizedDescription)
}