Файл представляет собой просто серию байтов, и без дополнительной информации вы не можете сказать, должны ли эти байты быть кодовыми точками в некотором строковом кодировании (скажем, ASCII или UTF-8 или ANSI-что-то) или что-то еще. Вам придется прибегнуть к эвристике, такой как:
- Попробуйте проанализировать файл в нескольких известных кодировках и посмотреть, удастся ли выполнить синтаксический анализ. Если это так, скорее всего, у вас есть текстовый файл.
- Если вы ожидаете, что текстовые файлы только на западных языках, вы можете предположить, что большинство символов находится в диапазоне ASCII (0..127), а точнее (33..127) плюс пробел (табуляция, новая строка, перенос возвращение, пробел). Подсчитайте вхождения каждого отдельного байтового значения, и если подавляющая часть вашего документа находится в наборе «типичных западных символов», обычно можно предположить, что это текстовый файл.
- Расширение предыдущего подхода; выберите достаточно большое количество текста на языках, которые вы ожидаете, и создайте профиль частоты символов. Чтобы проверить ваш файл, сравните профиль частоты символов в файле с данными теста и посмотрите, достаточно ли он близок.
Но вот еще одно решение: просто обрабатывайте все, что вы получаете, как текст, применяя необходимые преобразования, где это необходимо (например, кодирование HTML при отправке в веб-браузер). Пока вы не допускаете, чтобы файл интерпретировался как двоичные данные (например, пользователь дважды щелкнул по файлу), худшее, что вы получите, - это бессмысленные данные.