Уже много лет С/С++ позволяет достаточно безболезненно печатать в консоль wchar_t.
Например на С++ пиши:
locale::global(locale(""));
wcout.imbue(locale());
wcin.imbue(locale());
пользуйся iostream и не горюй... казалось бы... пока где-то не попытаешься воспользоваться не-юникодными cout или printf. Или пока какая-нибудь библиотека не попытается. А вот тогда всё нафиг сломается и дальше нормально печатать будет только ASCII, а весь Юникод будет ломать к чертям!
Вы думаете это компилятор кривой, или библиотека дырявая? Ну как же, такой ведь косяк. Нет ребята, это /by design/: http://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program/8957069#8957069