Я бы не "доверял" какому-либо файлу, который будет закодирован как UTF-8, когда присутствует спецификация 0xEF 0xBB 0xBF, вы можете потерпеть неудачу. Обычно при обнаружении спецификации UTF-8 это действительно должен быть файл в кодировке UTF-8. Но если, например, кто-то только что добавил спецификацию UTF-8 в файл ISO, вы не смогли бы закодировать такой файл так плохо, если бы в нем были байты, которые больше 0x0F. Вы можете доверять файлу, если у вас есть только байты размером до 0x0F, потому что в этом случае это ASCII-файл, совместимый с UTF-8, и в то же время это действительный файл UTF-8.
Если в файле есть не только байты <= 0x0F (после спецификации), чтобы убедиться, что он правильно закодирован в UTF-8, вам придется проверять правильность последовательностей и - даже если все последовательности действительны - проверять также, если каждая кодовая точка из последовательности использует самую короткую возможную последовательность, и проверьте также, нет ли никакой кодовой точки, которая соответствует высокому или низкому суррогату. Также проверьте, не превышает ли максимальное число байтов последовательности 4, а самая высокая кодовая точка равна 0x10FFFF. Наивысшая кодовая точка ограничивает также биты полезной нагрузки начального байта не более 0x4, а полезная нагрузка первого следующего байта не выше 0xF. Если все упомянутые проверки пройдены успешно, ваша спецификация UTF-8 говорит правду. </p>