是否可以测试是否可以使用NSStringEncoding加载文本文件而不实际加载它?

时间:2012-07-19 23:38:07

标签: objective-c character-encoding nsstring text-files nsstringencoding

我正在处理一个处理文本文件的应用程序。

在打开的对话框附件视图中,当用户选择一个文件时我想在NSPopUpButton上显示所选文件的支持编码,但到目前为止我唯一能找到的方法是测试文件是否可以用某些编码实际上是尝试将其加载到NSString。

现在我正在为每个编码执行此操作:

NSString *fileContents = [NSString stringWithContentsOfURL:selectedURL encoding:encoding error:nil];

if (fileContents)
{
    /* Add encoding to the list of supported encodings */
}

这会将整个文件加载到fileContents对象。

是否有可能只测试文件是否可以在没有实际加载的情况下加载?

1 个答案:

答案 0 :(得分:1)

除非您阅读所有内容,否则无法100%准确地预测。例如,许多编码是ASCII的超集,如果你在文件的中途停止阅读,你就会被愚弄;也许第一段只是发生只包含ASCII,然后4段后文件突然包含一堆数学方程式。

良好的中间立场是支持约定以指定已存在的编码。例如,vimemacs等文本编辑器指定了在文件的前几行中嵌入编码提示的特定语法,HTML和XML文件可以包含带有编码信息的<meta>标记。如果你能读懂它们,那么假设它们是正确的而不是读取整个文件是相当安全的;否则,你必须阅读整个文件才能确定。

(例外:某些Unicode编码以字节顺序标记开头,任何其他编码都不使用这些标记,因此您可以假设它们就是他们所说的那样。)