Ошибка NSString stringWithContentsOfFile с неправильным кодом ошибки - PullRequest
17 голосов
/ 16 июня 2009

Я пытаюсь загрузить файл в строку. Вот код, который я использую:

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

Когда передается в @ "about" в качестве имени файла, оно работает абсолютно нормально, показывая, что код работает. Когда передается в @ "eula" в качестве имени файла, происходит сбой с 'Ошибка какао 258', которая переводится в NSFileReadInvalidFileNameError. Однако, если я поменяю содержимое файлов, но имена останутся прежними, другой файл не сможет доказать, что в имени файла нет ничего плохого, это как-то связано с содержимым.

Файл about - это довольно простой HTML, но файл eula - это большой беспорядок, экспортированный из Word юридическим отделом.

Кто-нибудь знает что-нибудь внутри файла HTML, которое может вызвать появление этой ошибки?

Большое спасибо,

Sam

Ответы [ 6 ]

10 голосов
/ 15 декабря 2009

Я только что провел 45 минут с этой проблемой, только в моем случае решение было глупо , и проблема немного отличалась.

  • В моем каталоге ресурсов был файл Playlist.txt. Он загружался просто отлично.
  • Файл был изменен в один момент из XCode.
  • Файл перестал корректно загружаться с той же ошибкой, что и выше. Однако он никогда не перемещался и не изменялся тип кодировки.
  • Я выполнил команду-I (Get Info) для файла в каталоге XCode, он сказал мне, что это UTF-8 (как и ожидалось).
  • Я попробовал способ чтения файлов "usedEncoding", без игры в кости. Та же ошибка, кодировка была возвращена ноль.
  • Наконец, я удалил файл из XCode, снова перетащил его и сделал «Очистить все». Это решило проблему.

Это не первый случай, когда XCode магически кеширует вещи (неправильно), что заставляет меня тратить часы и часы напрасно. Если у вас есть такая ошибка, которая не имеет смысла, попробуйте удалить и заменить файлы и очистить все цели.

8 голосов
/ 16 июня 2009

Ошибка почти наверняка в том, что ваш файл не в UTF-8, но вы правы, это звучит как ошибка в отчете об ошибке.

Откройте файл eula с помощью BBEdit (или бесплатного TextWrangler) и посмотрите, какую кодировку он использует. Измените кодировку на UTF-8 и сохраните ее. Различайте два файла, чтобы увидеть, какие различия появились. Замените оригинальный файл новым (исправление любых глюков).

Если это решит проблему, используйте Apple Bug Reporter , чтобы сообщить об ошибке в отчете об ошибке.

4 голосов
/ 27 октября 2010

У меня была такая же ошибка с вами, используйте имя файла с [[NSBundle mainBundle] pathForResource: @ "pageList» ofType: @ "txt"]] удачи!

3 голосов
/ 16 июня 2009

Наиболее вероятная причина, по которой +stringWithContentsOfFile:encoding:error: в этом случае потерпит неудачу, может быть в том случае, если вы указали неправильную кодировку. Вы уверены, что ваш @"eula" файл имеет кодировку UTF8?

Если вы не уверены в кодировке файла, вы всегда можете попробовать +stringWithContentsOfFile:usedEncoding:error: и посмотреть, работает ли он и какая кодировка подходит.

0 голосов
/ 13 мая 2014

Я столкнулся с той же ошибкой.

Когда я немного поиграл, оказалось, что я не включил файл в ресурсы пакета копирования цели.

Я так и сделал, и все заработало.

Но, должен сказать - ошибка весьма обманчива по такой простой причине. Просто плохое предположение от Xcode

0 голосов
/ 21 мая 2010

Не знаю, в этом ли ваша проблема, но у меня просто была похожая вещь (stringWithContentsOfFile, без JSON), и проблема заключалась в том, что файл имел CRLF (windows) окончания строк и Western-как бы он ни назывался кодирование. Я использовал SubEthaEdit для конвертации в LF и UTF-8, и все работает отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...