Cocoa touch 如何确定文件';IOS中的Unicode字符编码?

Cocoa touch 如何确定文件';IOS中的Unicode字符编码?,cocoa-touch,file-io,ios-simulator,Cocoa Touch,File Io,Ios Simulator,在我们的应用程序中,我必须打开一个文本文件,它将是总和时间UTF-8格式或UTF-16格式 有没有办法确定文件的文件格式?或者是否可以检查准备好的“NSString”是否有效?苹果的文档对如何继续提供了一些指导: 如果您被迫猜测编码(请注意,在没有明确信息的情况下,这是一种猜测): 请尝试stringWithContentsOfFile:usedEncoding:error:或initWithContentsOfFile:usedEncoding:error:(或基于URL的等效项)。这些方法尝

在我们的应用程序中,我必须打开一个文本文件,它将是总和时间UTF-8格式或UTF-16格式


有没有办法确定文件的文件格式?或者是否可以检查准备好的“NSString”是否有效?

苹果的文档对如何继续提供了一些指导:

如果您被迫猜测编码(请注意,在没有明确信息的情况下,这是一种猜测):

请尝试stringWithContentsOfFile:usedEncoding:error:或initWithContentsOfFile:usedEncoding:error:(或基于URL的等效项)。这些方法尝试确定资源的编码,如果成功,则通过引用返回所使用的编码

如果(1)失败,请尝试通过指定UTF-8作为编码来读取资源

如果(2)失败,请尝试适当的旧编码。这里的“适当”取决于环境;它可能是默认的C字符串编码,也可能是ISO或Windows Latin 1,或者其他,这取决于数据的来源


如果您被迫猜测文本文件的编码(适用于Swift 4.0),则可以使用文档中所述的以下do catch块:

do {
    let str = try String(contentsOf: url, usedEncoding: &encodingType)
    print("Used for encoding: \(encodingType)")
} catch {
    do {
        let str = try String(contentsOf: url, encoding: .utf8)
        print("Used for encoding: UTF-8")
    } catch {
        do {
            let str = try String(contentsOf: url, encoding: .isoLatin1)
            print("Used for encoding: Windows Latin 1")
        } catch {
            // Error handling
        }
    }
}

添加带有答案链接的注释,而不是将其复制粘贴为自己的注释。很抱歉,下次我会的