0

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

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

现在我正在为每个编码这样做:

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

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

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

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

4

1 回答 1

1

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

一个好的中间立场是支持用于指定已经存在的编码的约定。例如,文本编辑器喜欢vimemacs指定在文件的前几行中嵌入编码提示的特定语法,HTML 和 XML 文件可以包含<meta>带有编码信息的标签。如果您可以阅读这些内容,则可以假设它们是正确的并且没有阅读整个文件是相当安全的;否则,您必须阅读整个文件才能确定。

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

于 2012-07-20T03:38:27.867 回答