【问题标题】:NSString stringWithContentsOfFile failing with what seems to be the wrong error codeNSString stringWithContentsOfFile 失败,错误代码似乎是错误的
【发布时间】: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 文件中的任何内容可能导致此错误发生?

非常感谢,

山姆

【问题讨论】:

    标签: ios iphone objective-c nsstring


    【解决方案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 的一个错误猜测

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-20
              • 2021-08-16
              • 2018-07-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多