Определить, является ли файл, вероятно, UTF-8 или нет, должно быть довольно легко. Определить кодировку, если это не UTF-8, в общем случае будет очень сложно.
Если файл закодирован с помощью UTF-8, старшие биты каждого байта должны следовать шаблону. Если символ равен одному байту, его старший бит будет очищен (ноль). В противном случае символ n
байта (где n равно 2 - 4) будет иметь старшие биты n
первого байта, равные единице, а затем один нулевой бит. В следующих n - 1
байтах должны быть установлены старший бит и очищен второй старший бит.
Если все байты в вашем файле следуют этим правилам, он, вероятно, закодирован в UTF-8. Я говорю, вероятно, потому, что любой может изобрести новую кодировку, которая, по преданию или случайно, следует тем же правилам, но по-разному интерпретирует коды.
Обратите внимание, что файл, закодированный в US-ASCII, будет следовать этим правилам, но старший бит каждого байта равен нулю. Можно рассматривать такой файл как UTF-8, поскольку они совместимы в этом диапазоне. В противном случае, это какая-то другая кодировка, и не существует встроенного теста, чтобы различать кодировку. Вы должны будете использовать некоторые контекстные знания, чтобы угадать.