ちょいと訳ありでヘッダを 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; }