#define _XOPEN_SOURCE #include #include #include #include int main(void) { iconv_t ic; char jis[3+2] = { 0x1b, 0x24, 0x42 }; int cu, cl; setlocale(LC_CTYPE, ""); if ((ic = iconv_open("wchar_t", "ISO-2022-JP")) == (iconv_t) -1) { perror("iconv_open"); return 1; } for (cu = 0x21; cu <= 0x7e; cu++) { for (cl = 0x21; cl <= 0x7e; cl++) { union { int val; char buf[sizeof(wchar_t)]; } wc; char *jisp = jis, *wcp = wc.buf; size_t il = sizeof(jis), ol = sizeof(wc.buf); size_t rv; jis[3] = cu; jis[4] = cl; if ((rv = iconv(ic, &jisp, &il, &wcp, &ol)) == -1) { char buf[60]; sprintf(buf, "iconv(%02x%02x):%d", cu, cl, rv); perror(buf); } else if (rv > 0) { fprintf(stderr, "iconv(%02x%02x): converted in a non-reversible way\n", cu, cl); } else { int w = wcwidth(wc.val); if (w != 2) { printf("width=%d jis=%02x%02x wc=%x\n", w, cu, cl, wc.val); } } } } iconv_close(ic); return 0; }