Как прокомментировал deceze, нет надежного способа автоматически определять кодировку текста.
Большинство кодировок пытаются использовать 1 байт для символов, так как в результате одна и та же последовательность байтов означает совершенно разные строки в разных кодировках. Практически единственное, что вы можете надежно сделать, это сказать, что «это недопустимая строка UTF8», другие часто используемые кодировки даже не имеют строгих правил, какие байтовые последовательности являются / не допустимы для него.
Вам лучше всего знать кодировку сообщения. Следующим вариантом будет сохранение текста в виде байтового массива рядом с «строкой utf8».
Если у вас очень ограниченный набор кодировок для принятия (utf8 / utf16 / cp1252), вы можете попытаться использовать некоторую эвристику для обнаружения - т.е. большинство английских строк в UTF16 будут иметь 0 как любой другой байт, и вы можете попробовать посмотрите, в порядке ли строка как UTF8 - если нет - чем, вероятно, является оставшаяся кодировка.