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 块