使用 NSUTF8StringEncoding 将 NSData 转换为 NSString 不适用于特殊字符

Convert NSData to NSString using NSUTF8StringEncoding is not working for special character

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