В некоторых случаях мне действительно нужно знать кодировку файла при чтении файла. Иногда мы можем сделать как Руководство по программированию строк Apple предлагает:
Чтение данных с неизвестной кодировкой
Если вы обнаружили у себя текст неизвестной кодировки, лучше всего убедиться в наличии механизма исправления неизбежных ошибок. Например, приложения Apple Mail и Safari имеют меню кодировки, а TextEdit позволяет пользователю повторно открыть файл с явно заданной кодировкой.
Если вы вынуждены угадывать кодировку (и обратите внимание, что при отсутствии явной информации это догадка):
Попробуйте stringWithContentsOfFile:usedEncoding:error: или initWithContentsOfFile:usedEncoding:error: (или эквиваленты на основе URL).
Эти методы пытаются определить кодировку ресурса и в случае успеха возвращают по ссылке используемую кодировку.
Если (1) не удается, попробуйте прочитать ресурс, указав в качестве кодировки UTF-8.
Если (2) не удается, попробуйте соответствующую устаревшую кодировку.
«Подходящий» здесь немного зависит от обстоятельств; это может быть кодировка строки C по умолчанию, это может быть ISO или Windows Latin 1 или что-то еще, в зависимости от того, откуда поступают ваши данные.
Наконец, вы можете попробовать методы загрузки NSAttributedString из Application Kit (например, initWithURL:options:documentAttributes:error:).
Эти методы пытаются загрузить простые текстовые файлы и возвращают используемую кодировку. Их можно использовать в более или менее произвольных текстовых документах, и их стоит рассмотреть, если ваше приложение не имеет специального опыта работы с текстом. Они могут не подходить для инструментов уровня Foundation или документов, которые не являются текстом на естественном языке.
Тут я столкнулся с некоторой проблемой. Иногда я могу узнать ошибку. Например, когда я читаю файл кодировки GB2312 с использованием UTF8, я получаю ноль, поэтому я знаю ошибку. Но когда я читаю файл кодировки GB2312, используя способ BIG5, я не могу узнать ошибку.
Метод инициализации NSAttributedString может работать на Mac, но когда дело доходит до iOS, ему нужна iOS7, что не так хорошо.
Я также ищу его и нахожу некоторые обсуждения, например это на CocoBuilder, а также на Mac. Тогда как насчет iOS?