Вы не можете решить эту проблему в общем случае без некоторой дополнительной информации, потому что одна и та же строка может быть допустимой в нескольких кодировках.Например, шестнадцатеричные значения 48 45 4C 4C D4 равны «АД» в iso-8859-1 и «АД» в кодировке KOI8-R.Любая из 8-битных кодировок будет практически неразличима, если только вы не начнете заниматься эвристикой, например, проверкой словаря (хммм ... выглядит как болгарский).
Одна из стратегий - сначала попробовать utf-8и затем вернитесь к назначенному 8-битному кодированию (например, iso-8859-1), если вход не сможет декодировать как utf-8.(В utf-8 являются байтовыми последовательностями, которые являются недопустимыми, поэтому есть большая вероятность, что строка в некотором произвольном 8-битном кодировании выдаст ошибку, если вы попытаетесь декодировать ее как utf-8).