NSString stringWithContentsOfFile 失败,错误代码似乎是错误的

Posted

技术标签:

【中文标题】NSString stringWithContentsOfFile 失败,错误代码似乎是错误的【英文标题】:NSString stringWithContentsOfFile failing with what seems to be the wrong error code 【发布时间】:2009-06-15 23:55:42 【问题描述】:

我正在尝试将文件加载到字符串中。这是我正在使用的代码:

NSError *error = nil;
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                                                     ofType:@"html"];
NSString *text = [NSString stringWithContentsOfFile:fullPath 
                                           encoding:NSUTF8StringEncoding 
                                              error:&error];

当作为文件名传入@"about" 时,它工作得非常好,显示代码工作正常。 当作为文件名传入@"eula" 时,它会失败并显示“Cocoa 错误 258”,它转换为 NSFileReadInvalidFileNameError。但是,如果我交换文件的内容但保持名称相同,则另一个文件无法证明文件名没有问题,这与内容有关。

about 文件是相当简单的 HTML,但 eula 文件是法律部门从 Word 中导出的大量文件。

有谁知道 HTML 文件中的任何内容可能导致此错误发生?

非常感谢,

山姆

【问题讨论】:

【参考方案1】:

我刚刚花了 45 分钟来解决这个问题,只是在我的情况下,解决方案是愚蠢的,而且问题略有不同。

我的资源目录中有一个名为 Playlist.txt 的文件。加载正常。 文件曾在 XCode 中被修改过。 文件停止正常加载,出现与上述相同的错误。然而,它从未被移动过,也从未改变过它的编码类型。 我对 XCode 目录中的文件执行了命令 -I(获取信息),它告诉我它是 UTF-8(如预期的那样)。 我尝试了“usedEncoding”读取文件的方式,没有骰子。同样的错误,编码返回 null。 最后,我从 XCode 中删除了该文件,再次将其拖入,然后执行了 Clean All。这解决了问题。

这不是第一次 XCode 神奇地缓存东西(不正确地)给我浪费了好几个小时的时间。如果您遇到此类没有意义的错误,请尝试删除和替换文件并清除所有目标。

【讨论】:

【参考方案2】:

错误几乎可以肯定是您的文件不是 UTF-8,但您是对的,这听起来确实像错误报告中的错误。

用 BBEdit(或免费的 TextWrangler)打开 eula 文件,看看它使用什么编码。将编码更改为 UTF-8 并保存。比较这两个文件以查看出现了哪些差异。用新文件替换原始文件(修复任何故障)。

如果这样可以解决问题,请使用Apple Bug Reporter 在错误报告中报告错误。

【讨论】:

【参考方案3】:

我和你有同样的错误,使用文件名 [[NSBundle mainBundle] pathForResource:@"pageList" ofType:@"txt"]] 祝你好运!

【讨论】:

【参考方案4】:

+stringWithContentsOfFile:encoding:error: 在这种情况下失败的最可能原因是您提供了错误的编码。您确定您的 @"eula" 文件是 UTF8 编码的吗?

如果您不确定文件的编码,您可以随时尝试+stringWithContentsOfFile:usedEncoding:error:,看看它是否有效以及它提供了什么编码。

【讨论】:

【参考方案5】:

不知道这是否是您的问题,但我只是有一个类似的事情(stringWithContentsOfFile,没有 JSON),问题是该文件有 CRLF(windows)行尾和 Western-whatever-it's-所谓编码。我使用 SubEthaEdit 转换为 LF 和 UTF-8,一切正常。

【讨论】:

老实说,我只是打开它,玩了一下,更改了编码并再次保存 - 它要么是文件中某处的无效字符,要么是你发现的类似内容 - 行尾/编码问题。这是一个非常误导我的错误信息!【参考方案6】:

我遇到了同样的错误。

当我玩了一下时,似乎我没有将文件包含在目标的副本包资源中。

我做到了,而且效果很好。

但是,不得不说——对于这样一个简单的原因,错误是相当具有误导性的。只是 Xcode 的一个错误猜测

【讨论】:

以上是关于NSString stringWithContentsOfFile 失败,错误代码似乎是错误的的主要内容,如果未能解决你的问题,请参考以下文章

NSString

NSString基本概念

将 NSString 转换为具有日期格式的 NSString 块

NSString 到 CFStringRef 和 CFStringRef 到 ARC 中的 NSString?

NSString 转换 UTF8

iOS-将NSString转换成UTF8编码的NSString