$ cat > test.c #include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, ""); wprintf(L"%s\n", setlocale(LC_CTYPE, NULL)); wprintf(L"[\x0440]\n"); return 0; } $ gcc -std=c99 test.c $ ./a.out ru_RU.KOI8-R [р] $ cat > test.cc #include <iostream> #include <locale> #include <clocale> using namespace std; int main(void) { locale::global(locale("")); wcout.imbue(locale("")); wcout << L"[\x0440]" << endl; return 0; } $ g++ test.cc $ a.out [$ т.е. программа на C++ в момент вывода символа не из ASCII просто останавливается. (с кодом завершения 0). Это очень плохо. Программа на C приведена для демонстрации того, что символ правильный и вывод wchar_t в libc реализован правильно и работает.
fixed in gcc3.4