“contentsOfFile”返回零,可能的原因

时间:2014-10-19 18:06:32

标签: swift nsstring

获取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})

2 个答案:

答案 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)
}