【发布时间】:2020-01-21 00:39:26
【问题描述】:
我正在加载一个文本文件,编码未知,因为它来自其他来源。内容本身来自 macOS NSDocument 的 read 方法,该方法被输入到我的模型的读取中。 String 构造函数 requires the encoding when using Data,如果你假设不正确,你可能得到一个 null。我已经创建了潜在编码的条件级联(这就是other people seem to be doing),必须有更好的方法来做到这一点。有什么建议吗?
override func read(from data: Data, ofType typeName: String) throws {
model.read(from: data, ofType: typeName)
}
在模型中:
func read(from data: Data, ofType typeName: String) {
if let text = String(data: data, encoding: .utf8) {
content = text
} else if let text = String(data: data, encoding: .macOSRoman) {
content = text
} else if let text = String(data: data, encoding: .ascii) {
content = text
} else {
content = "?????"
}
}
【问题讨论】:
-
如果您的文字来自网络,您可以查看此帖子stackoverflow.com/a/34687962/2303865
-
感谢@LeoDabus 的建议,不幸的是它不是来自网络。它是文件系统上的常规文本文件,因此是 NSDocument。
-
NSString上有一个静态方法可以猜测编码
-
@LeoDabus 除非我遗漏了什么,否则 NSString 还需要指定编码。您是否有指向特定工厂或构造方法的文档的链接?