ICU 3.6

ちょいと訳ありでヘッダを grep してたら ucsdet.h てのがあるじゃないですか。
つまり文字コード判定用の API
下記のようなコードで適当に試してみたところ、UTF-8 は正しく認識してくれたものの、Shift_JIS が ISO-8859-5 と判定されたり EUC-JP が Shift_JIS と判定されたりで、まだまだな感じですが、これからに期待です。
(Safari から投稿しているため、バックスラッシュが文字化けしています。行末の ? は \ に、"?n" は "\n" に読み替えてください)

#include <stdio.h>
#include <string.h>
#include <unicode/ucsdet.h>

#define IF_ERROR_DIE() { ?
	if (U_FAILURE(err)) { ?
		ucsdet_close(ucsd); ?
		fprintf(stderr, "Error: %s?n", u_errorName(err)); ?
		return 1; ?
	} ?
}

int main(int argc, char **argv)
{
	UErrorCode err = U_ZERO_ERROR;
	UCharsetDetector *ucsd;
	const UCharsetMatch *ucsm;
	const char *cs;
	if (argc == 1 || strlen(argv[1]) == 0) {
		fprintf(stderr, "Give me text.?n");
		return 1;
	}
	ucsd = ucsdet_open(&err);
	if (U_FAILURE(err)) {
		fprintf(stderr, "Failed to open the charset detector.?n");
		return 1;
	}
	ucsdet_setText(ucsd, argv[1], strlen(argv[1]), &err);
	IF_ERROR_DIE();
	ucsm = ucsdet_detect(ucsd, &err);
	IF_ERROR_DIE();
	cs = ucsdet_getName(ucsm, &err);
	IF_ERROR_DIE();
	ucsdet_close(ucsd);
	printf("The charset is %s.?n", cs);
	return 0;
}