ios - 使用 NSUTF8StringEncoding 将 NSData 转换为 NSString 对于特殊字符不起作用

标签 ios swift encoding nsstring

我想解析一个 CSV 文件以创建一个字符串。

我使用 Dropbox API 获取数据。假设我的 CSV 文件包含一个简单的词:“école”。当我尝试创建一个字符串时,出现错误:fatal error: expectedly 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))

关于ios - 使用 NSUTF8StringEncoding 将 NSData 转换为 NSString 对于特殊字符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579758/

相关文章:

ios - 使用 swift 3 在 VLCPlayer 中播放电影时完全旋转横向 View

ios - 发布 Facebook Open Graph 故事时如何选择一对多?

swift - AudioKit AKMetronome回调定时似乎不精确或量化

ios - 如何在quickblox中实现发送图像(Swift、iOS、xcode)

Swift - 保持两个属性同步

scala - 为什么当我打印希腊字符时,IntelliJ 的 scala 控制台会显示问号?

ios - 如何在 xamarin 中向 iOS8 兼容版本添加 iOS7 支持

ios - 通过 CVOpenGLESTextureCacheCreate 获取屏幕截图

unicode - UTF-8 和 Unicode 有什么区别?

Python:Got\xa0 而不是 CSV 中的空格,无法删除或转换