Вообще, проверка того, является ли ввод UTF, является вопросом эвристики - не существует определенного алгоритма, который бы указывал вам «да / нет». Чем сложнее эвристика, тем меньше ложных позитивов / негативов вы получите, однако нет «верного» пути.
Для примера эвристики вы можете проверить эту библиотеку: http://utfcpp.sourceforge.net/
bool valid_utf8_file(iconst char* file_name)
{
ifstream ifs(file_name);
if (!ifs)
return false; // even better, throw here
istreambuf_iterator<char> it(ifs.rdbuf());
istreambuf_iterator<char> eos;
return utf8::is_valid(it, eos);
}
Вы можете либо использовать его, либо проверить его источники, как они это сделали.