wchar_t

wchar_t の中身が UTF-16 なのは glibc だからじゃないかしら。

手元の FreeBSD 7.0-STABLE だとこんなかんじ。

$ echo -n 'あ' | nkf -e | LANG=ja_JP.eucJP ./a.out
ffffffa2 ffffffa4 00 00
$ echo -n 'あ' | nkf -w | LANG=ja_JP.UTF-8 ./a.out
42 30 00 00
$ echo -n 'あ' | nkf -s | LANG=ja_JP.SJIS ./a.out
ffffffa0 ffffff82 00 00
$ echo -n 'a' | LANG=ja_JP.eucJP ./a.out
61 00 00 00
$ echo -n 'a' | LANG=ja_JP.UTF-8 ./a.out
61 00 00 00
$ echo -n 'a' | LANG=ja_JP.SJIS ./a.out
61 00 00 00

こんなソースでいいかげんに出力。

#include <wchar.h>
#include <locale.h>
#include <stdio.h>

int main(void)
{
    wint_t c;
    char *s = (char *)(&c);
    int i;

    setlocale(LC_ALL, "");
    while ((c = getwchar()) != WEOF) {
        for (i = 0; i < sizeof(wchar_t); i++)
            printf("%02x ", s[i]);
        putchar('\n');
    }

    return 0;
}