Для файлов ISO8859_1 нет простого способа отличить их от ASCII. Однако для файлов Unicode это обычно можно определить по первым нескольким байтам файла.
Файлы UTF-8 и UTF-16 содержат Порядок следования байтов (BOM) в самом начале файла. Спецификация - это неразрывное пространство нулевой ширины.
К сожалению, по историческим причинам Java не обнаруживает это автоматически. Такие программы, как «Блокнот», будут проверять спецификацию и использовать соответствующую кодировку. Используя unix или Cygwin, вы можете проверить спецификацию с помощью команды file. Например:
$ file sample2.sql
sample2.sql: Unicode text, UTF-16, big-endian
Для Java я предлагаю вам проверить этот код, который будет определять общие форматы файлов и выбирать правильную кодировку: Как прочитать файл и автоматически указать правильную кодировку