Для кириллицы можно примерно такой алгоритм:
1. Задетектить UTF-16
обычно в начале текста присутствует Unicode-признак порядка U+FEFF, по нему можно отличить big endian / little endian.
Если признака нет, но в четных позициях текста (начиная с нуля) в основном символы с кодом 0x00 (для латиницы) и 0x04 (для кириллицы) - то это UTF-16 big endian, если в нечетных - little endian.
2. Задетектить UTF-8
все кириллические символы будут состоять из двух октетов, первый октет будет иметь значение 0xd0 или 0xd1, латиница будет совпадать с ASCII
3. Отличить Windows-1251 от KOI8-r - и там и там для кириллицы используют в основном символы с кодом 192-255, но в koi8-r сначала идут маленькие символы, в windows-1251 - сначала большие. Если текст преимущественно состоит из символов 192-223 но в начале предложения (после точки с пробелом) идут символы с кодом 224-255 - это ko8-r, если наоборот - windows-1251 + можно использовать частотный анализ символов. Латиница совпадает с ASCII.
Все остальные кодировки достаточно редки, правда китайцы (и почему-то Google) любят кодировать кириллицу в Big-5.