我正在开发一个处理文本文件的应用程序。
在打开对话框的附件视图中,当用户选择我想在NSPopUpButton上显示的文件时,所选文件支持的编码,但到目前为止,我能找到的测试文件是否可以用特定编码打开的唯一方法是实际尝试将其加载到NSString。
现在我正在为每个编码做这件事:
NSString *fileContents = [NSString stringWithContentsOfURL:selectedURL encoding:encoding error:nil];
if (fileContents)
{
/* Add encoding to the list of supported encodings */
}
这会将整个文件加载到fileContents
对象。
是否可以只测试文件是否可以在不实际加载的情况下加载?
除非你通读了所有内容,否则这是不可能100%准确预测的。例如,许多编码都是ASCII的超集,如果你中途停止读取文件,你就会被愚弄;也许第一段恰好只包含ASCII,然后4段后,文件突然包含了一堆数学方程。
一个好的中间立场是支持约定来指定已经存在的编码。例如,像vim
和emacs
这样的文本编辑器指定了在文件的前几行嵌入编码提示的特定语法,HTML和XML文件可以包含带有编码信息的<meta>
标记。如果你能阅读这些,那么假设它们是正确的,而不是阅读整个文件是相当安全的;否则,您必须阅读整个文件才能确定。
(一个例外:某些Unicode编码以任何其他编码都不使用的字节顺序标记开始,因此您可以假设这些标记就是它们所说的。)