#include #include #include "iconv.h" #define BUFSIZE 1024*1024 int main(int argc, char **argv){ char inbuf[BUFSIZE]; iconv_t conv = iconv_open("UTF-8", "UTF-8"); char *dummy = NULL; size_t dummy2 = 0; // reset convertor iconv(conv,NULL,NULL,&dummy,&dummy2); size_t inCursor = 0; while (!feof(stdin)){ char outbuf[BUFSIZE]; int count = fread(inbuf, 1, BUFSIZE, stdin); char *pin = inbuf; char *pout = outbuf; size_t incount = count; size_t outcount = BUFSIZE; int res = iconv(conv, &pin, &incount, &pout, &outcount); if (res < 0) { switch(errno) { case EILSEQ: printf("Illegal sequence: 0x%02x 0x%02x 0x%02x 0x%02x " "at byte %d.\n", (unsigned char)*pin, (unsigned char)*(pin+1), (unsigned char)*(pin+2), (unsigned char)*(pin+3), pin-inbuf+inCursor); break; case EINVAL: printf("Invalid character: 0x%02x at byte %d.\n", (unsigned char)*pin, pin-inbuf+inCursor); break; } } } }