iOS:什么是检测文件编码的最佳方式

在某些情况下,我真的需要在读取文件时知道文件的编码。 有时我们可以像苹果的String Programming Guide一样做:

读取未知编码的数据

如果你发现自己的文本是未知的编码,最好确保有一个机制来纠正不可避免的错误。 例如,Apple的Mail和Safari应用程序具有编码菜单,TextEdit允许用户使用明确指定的编码重新打开该文件。

如果你不得不猜测编码(并注意在没有明确信息的情况下,这是一个猜测):

  1. 尝试stringWithContentsOfFile:usedEncoding:error:或者initWithContentsOfFile:usedEncoding:error :(或者基于URL的等价物)。

    这些方法试图确定资源的编码,如果成功则通过引用返回所使用的编码。

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

  3. 如果(2)失败,请尝试使用适当的传统编码。

    这里的“恰当”在一定程度上取决于情况。 它可能是默认的Cstring编码,它可能是ISO或Windows拉丁语1,或其他,这取决于你的数据来自哪里。

  4. 最后,你可以从Application Kit中尝试NSAttributedString的加载方法(比如initWithURL:options:documentAttributes:error :)。

    这些方法试图加载纯文本文件,并返回使用的编码。 它们可以用在或多或less任意的文本文件上,如果你的应用程序没有特别的文本专业知识,那么值得考虑。 它们可能不适合基础级工具或不是自然语言文本的文档。

这里我遇到了一些问题。 有时我可以知道错误。 例如当我用UTF8的方式读取GB2312编码文件的时候,我会得到零,所以我知道错误。 但是当我用BIG5的方式读取GB2312编码文件的时候,我不知道这个错误。

NSAttributedString的init方法可能适用于Mac,但是当涉及到iOS时,它需要iOS7,不太好。

我也search它,并find一些这样的讨论cocoa ,也可以在Mac上。 那么在iOS上呢?

你可以使用stringWithContentsOfFile:usedEncoding:error:,除了新string外,还会返回使用的编码。

但是你不能总是能够确定文件的编码。