iOS:什么是检测文件编码的最佳方式
在某些情况下,我真的需要在读取文件时知道文件的编码。 有时我们可以像苹果的String Programming Guide一样做:
读取未知编码的数据
如果你发现自己的文本是未知的编码,最好确保有一个机制来纠正不可避免的错误。 例如,Apple的Mail和Safari应用程序具有编码菜单,TextEdit允许用户使用明确指定的编码重新打开该文件。
如果你不得不猜测编码(并注意在没有明确信息的情况下,这是一个猜测):
尝试stringWithContentsOfFile:usedEncoding:error:或者initWithContentsOfFile:usedEncoding:error :(或者基于URL的等价物)。
这些方法试图确定资源的编码,如果成功则通过引用返回所使用的编码。
如果(1)失败,则尝试通过指定UTF-8作为编码来读取资源。
如果(2)失败,请尝试使用适当的传统编码。
这里的“恰当”在一定程度上取决于情况。 它可能是默认的Cstring编码,它可能是ISO或Windows拉丁语1,或其他,这取决于你的数据来自哪里。
最后,你可以从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外,还会返回使用的编码。
但是你不能总是能够确定文件的编码。