#include #include #include #include #include #define UCS_STR "\x4e\x8c" /* EUC-TW 0xa2a2, EUC-JP 0x */ static char *to_code; void xiconv(iconv_t cd, int out_size) { unsigned char euc[4]; char *inp = UCS_STR; char *outp = euc; size_t inbytesleft = strlen(UCS_STR); size_t outbytesleft = out_size; size_t ret; errno=0; ret = iconv(cd, &inp,&inbytesleft, &outp,&outbytesleft); if(errno || ret == (size_t)-1) { int err = errno; errno = E2BIG; perror("expect"); errno = err; perror("result"); } else printf("%s: 0x%02x%02x\n",to_code,euc[0],euc[1]); } iconv_t xiconv_open(char *code) { iconv_t cd; to_code = code; errno = 0; if(errno || (cd = iconv_open(to_code,"UCS-2BE")) == (iconv_t)-1) { perror("Can't oepn converter"); exit(1); } return cd; } int main(void) { iconv_t cd; cd = xiconv_open("EUC-TW"); xiconv(cd,4);puts("---"); xiconv(cd,1);puts("---"); iconv_close(cd); cd = xiconv_open("EUC-JP"); xiconv(cd,4);puts("---"); xiconv(cd,1);puts("---"); iconv_close(cd); return 0; }