1 wprintf が 'Ω' を 3A9 (UTF16) として表示するのは本当に奇妙ですが、wctomb は wchar を CEA9 (UTF8) に変換します。私のロケールはデフォルトの en_US.utf8 です。man ページが言ったように、それらは私のロケールに準拠する必要がありますが、wpritnf は UTF16 を使用します。なぜですか?
http://www.fileformat.info/info/unicode/char/3a9/index.htmからの抜粋
Ω (UTF)
UTF-8 (16 進数) 0xCE 0xA9 (cea9)
UTF-16 (16 進数) 0x03A9 (03a9)
2 wprintf と printf を同じプログラムで実行することはできません。wprintf または printf のいずれかを使用する必要があります。なぜですか?
私のプログラムを見てください:
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>
int main() {
setlocale(LC_ALL,""); // inherit locale setting from environment
int r;
char wc_char[4] = {0,0,0,0};
wchar_t myChar1 = L'Ω'; //greek
// should comment out either wprintf or printf, they don't run together
r = wprintf(L"char is %lc (%x)\n", myChar1, myChar1);//On Linux, to UTF16
r = wctomb(wc_char, myChar1); // On Linux, to UTF8
r = printf("r:%d, %x, %x, %x, %x\n", r, wc_char[0], wc_char[1], wc_char[2], wc_char[3]);
}