Как прочитать текстовый файл, не зная кодировку - PullRequest
7 голосов
/ 09 февраля 2011

При чтении текстового файла, созданного в другом месте вне моего приложения, используемая кодировка неизвестна. Мое приложение использует NSUnicodeStringEncoding (что совпадает с NSUTF16StringEncoding), поэтому возникают проблемы при чтении файлов, отличных от UTF16.

Есть ли способ угадать кодировку файла? Мой приоритет заключается в том, чтобы иметь возможность читать файлы UTF8, а затем все остальные файлы. Итерация через доступные кодировки и проверка, является ли длина прочитанной строки больше нуля, действительно хороший подход?

Заранее спасибо.

Игнасио

Ответы [ 2 ]

9 голосов
/ 09 февраля 2011

В документации Apple есть некоторые рекомендации о том, как действовать: Руководство по программированию строки: чтение данных с неизвестной кодировкой :

Если вы вынуждены угадывать кодировкучто при отсутствии явной информации это предположение):

  1. Попробуйте stringWithContentsOfFile:usedEncoding:error: или initWithContentsOfFile:usedEncoding:error: (или эквиваленты на основе URL).Эти методы пытаются определить кодировку ресурса, и в случае успешного возврата по ссылке использованная кодировка.

  2. Если (1) не удается, попробуйте прочитать ресурс, указав UTF-8 каккодировка.

  3. Если (2) не удается, попробуйте соответствующую унаследованную кодировку.«Соответствующий» здесь немного зависит от обстоятельств;это может быть кодировка строки C по умолчанию, это может быть ISO или Windows Latin 1, или что-то еще, в зависимости от того, откуда поступают ваши данные.

1 голос
/ 09 февраля 2011

Если файл построен правильно, вы можете прочитать первые четыре байта и посмотреть, является ли это спецификацией (меткой порядка байтов):

http://en.wikipedia.org/wiki/Byte-order_mark

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