В общем, нет способа сделать это. UTF-8 не имеет «магического числа» или маркера, поэтому вы можете только доказать, что файл не находится в UTF-8 (если он содержит недопустимые последовательности), но не является таковым.
Однако вы можете использовать эвристический подход. Что именно работает, будет зависеть от ваших данных.
Одна идея:
- Составьте список всех файлов, которые являются текстовыми файлами и содержат не-ASCII символы. Вторую часть легко сделать, используя perl или аналогичный; первое будет зависеть от того, какие файлы у вас есть. Unix
file
также проверит наличие символов, отличных от ASCII, но он менее надежен (проверяет только начало файла). - Если список небольшой, проверьте файлы вручную. В противном случае, проверьте, какие из них действительны в UTF-8 (опять же, в Perl есть модули для этого или используйте инструмент, подобный
iconv
илиrecode
). Действительные файлы UTF-8, вероятно, в порядке. Остальные должны быть проверены вручную (если вы точно не знаете, как они кодируются).