Традиционно поддержка Unicode в консоли Windows очень слаба, и вероятно для Windows вам стоит задуматься о графическом интерфейсе (в нём как раз обычно всё в порядке). В «свежих» версиях Visual Studio рантайм стал умнее, и с поддержкой Unicode стало лучше.
Тем не менее, вам нужен как минимум шрифт, поддерживающий Unicode (например, Lucida Console).
Например, мой экземпляр Visual Studio 2013 с вот таким исходником:
#include "stdafx.h"
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
int main(void)
{
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"%s", L"кошка \x65e5\x672c\x56fd\n");
return 0;
}
выдал на экран кириллицу, но не иероглифы. При редиректе вывода в файл, однако, всё читается правильно. (Это означает, что проблема в шрифте.) С выводом RTL-текстов (иврит, арабский), однако, всё ещё возможны проблемы.
Информация взята отсюда.
(Ответ относится к toolchain'у Visual Studio.)
<windows.h>), а вот где искать_O_U16TEXTне знаю. – avp Jul 07 '15 at 12:10-DUNICODE -D_UNICODEи-municodeдля линковки? – VladD Jul 07 '15 at 12:23%s, когда надо%ls? (В Visual Studio баг, поэтому для него%s.) – VladD Jul 07 '15 at 14:10s: If nolmodifier is present: Theconst char *argument is expected [...] If anlmodifier is present: Theconst wchar_t *argument is expected. – VladD Jul 07 '15 at 14:29%lsта же? – VladD Jul 07 '15 at 14:29_setmode? Или использовать_setmodeс_O_U8TEXT = 0x40000? Должно же оно как-то работать. – VladD Jul 07 '15 at 15:06chcp 10000. Может, это поможет в вашем случае? – VladD Jul 07 '15 at 22:14