#include <stdio.h> #include <wchar.h> #include <errno.h> #include <locale.h> main() { char *fname = ",getwc-test"; wchar_t obuf[16]; wint_t c, c1; FILE *fp; char *locales[] = { "C", "en_US.UTF-8", "ja_JP.eucJP", 0, }, **locale; int i; obuf[0] = 0xa440; obuf[1] = 0xac4f; obuf[2] = 0xb36f; obuf[3] = 0xcf20; obuf[4] = L'\0'; setlocale(LC_CTYPE, "zh_TW.Big5"); fp = fopen(fname, "w"); fwprintf(fp, L"%ls\n", obuf); fclose(fp); for (locale = locales; *locale; locale++) { setlocale(LC_CTYPE, *locale); fp = fopen(fname, "r"); for (i = 0; i < wcslen(obuf); i++) { c = getwc(fp); if (c == WEOF && errno == EILSEQ) c = (wint_t) getc(fp); if ((c & 0xff00) == 0) { c1 = getc(fp); c = (c << 8) | c1; } if (c == obuf[i]) wprintf(L"%-12.12s %d wrote 0x%x read 0x%x ok\n", *locale, i, obuf[i], c); else wprintf(L"%-12.12s %d wrote 0x%x read 0x%x getwc error\n", *locale, i, obuf[i], c); } fclose(fp); } unlink(fname); }