使用 NSUTF8String 将 NSData 转换为 NSString 对特殊字符不起作用



我想解析一个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))

最新更新