Это было довольно интересно.По-видимому, компилятор переводит омегу из UTF-8 в UNICODE, но каким-то образом libc все испортил.
Прежде всего: спецификатор формата %c
ожидает char
(даже в wprintf -version), поэтому вы должны указать %lc
(и, следовательно, %ls
для строк).
Во-вторых, если вы запускаете свой код таким образом, языковой стандарт устанавливается на C
(он не берется автоматически из среды).Вы должны вызвать setlocale
с пустой строкой, чтобы взять локаль из окружения, чтобы libc снова был счастлив.
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>
int main() {
int r;
wchar_t myChar1 = L'Ω';
setlocale(LC_CTYPE, "");
r = wprintf(L"char is %lc (%x)\n", myChar1, myChar1);
}