代码之家  ›  专栏  ›  技术社区  ›  deanWombourne

nsstring StringWithContentsOfFile失败,错误代码似乎错误

  •  17
  • deanWombourne  · 技术社区  · 17 年前

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

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

    当以@“about”作为文件名传入时,它工作得非常好,显示代码可以工作。 当以@“eula”作为文件名传入时,它将失败,并显示“cocoa错误258”,这将转换为nsfilereadinvalidfilename错误。但是,如果我交换了文件的内容,但是保持名称不变,那么另一个文件就不能证明文件名没有问题,这与内容有关。

    about文件是相当简单的HTML,但是eula文件是由法律部门从Word导出的一个大混乱。

    是否有人知道HTML文件中可能导致此错误的任何内容?

    非常感谢,

    山姆

    6 回复  |  直到 17 年前
        1
  •  8
  •   Peter N Lewis    17 年前

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

    使用bbedit(或免费的textwrangler)打开eula文件,查看它使用的编码方式。将编码改为UTF-8并保存。对这两个文件进行比较,看看有什么区别。将原始文件替换为新文件(修复任何问题)。

    如果解决了问题,则使用 Apple Bug Reporter 在错误报告中报告错误。

        2
  •  10
  •   Eli    16 年前

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

    • 我的资源目录中有一个名为playlist.txt的文件。装载得很好。
    • 文件在Xcode中的某一点被修改。
    • 文件已停止正确加载,错误与上述相同。但是,它从未被移动过,也没有更改编码类型。
    • 我对xcode目录中的文件执行了一个命令-i(get info),它告诉我它是utf-8(如预期的那样)。
    • 我试过用“有用的编码”的方式读取文件,没有骰子。同样的错误,编码返回空值。
    • 最后,我从xcode中删除了该文件,再次将其拖入,并进行了清理。解决了问题。

    这不是第一次Xcode神奇地缓存东西(错误地)导致我浪费了几个小时和几个小时的时间。如果出现这样一个毫无意义的错误,请尝试删除和替换文件并清除所有目标。

        3
  •  4
  •   baowuwolf    15 年前

    我和你有同样的错误,用文件名 [[nsbundle mainbundle]pathforresource:@“pagelist”of type:@“txt”]]祝您好运!

        4
  •  3
  •   Naaff    17 年前

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

    如果您对文件的编码不确定,可以尝试 +stringWithContentsOfFile:usedEncoding:error: 相反,看看它是否工作,以及它使用了什么编码。

        5
  •  0
  •   Olie    16 年前

    不知道这是不是你的问题,但我有一个类似的东西(StringWithContentsOfFile,没有JSON),问题是文件有CRLF(Windows)行结尾和WESTERN,不管它是什么编码。我用subethaedit转换成lf和utf-8,一切都很好。

        6
  •  0
  •   Shailesh    12 年前

    我也犯了同样的错误。

    当我玩了一会儿,似乎我没有将文件包含在目标的复制包资源中。

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

    但是,不得不说,对于这样一个简单的原因来说,错误是非常误导的。只是Xcode的一个错误猜测