Это непростая проблема, и, как правило, она полагается на эвристику, чтобы сделать правильное предположение о том, что такое входная кодировка, которая может быть вызвана относительно безвредными входными данными - например, посмотрите на в этой Википедии.article и Файл Notepad с кодировкой Redux для получения более подробной информации.
Если вы ищете решение только для Windows с минимальными зависимостями, вы можете использовать комбинацию IsTextUnicode и MLang's DetectInputCodePage для попытки обнаружения набора символов.
Если вы ищете переносимость, но не возражаете против принятия довольно большой зависимости в форме ICUтогда вы можете использовать его процедуры обнаружения набора символов для того, чтобы добиться того же самого в портативном режиме.