2013-03-15 5 views
7

Я делаю этот простой вывод из консольного приложения Unicode (с использованием C++ и Visual Studio 2008). Этот код предназначен для работы в Windows:_tprintf с символами Unicode в консольном приложении

_tprintf(L"Some sample string\n"); 

Все работает нормально. Но если я добавить не-ASCII символов в наличии:

_tprintf(L"Some sample € string\n"); 

что получает выход на консоль все, до этого символа:

Некоторые образцы

Что я делаю неправильно Вот?

+2

Это потому, что ваша консоль не может отображать этот символ. Преобразование из Unicode в 8-битную кодовую страницу не выполняется и обрезает строку. Кодовая страница по умолчанию для консоли обычно 437, старая кодовая страница IBM PC, машина, которая была разработана до того, как Европа приняла новую валюту. Вам нужно будет переключить консоль на другую кодировку, которая имеет символ, SetConsoleOutputCP(). –

+0

Я просто попробовал вызывать 'SetConsoleOutputCP (1200);' перед этим вызовом и ничего не изменилось. – ahmd0

+2

дайте '_setmode (_fileno (stdout), _O_WTEXT);' a try – Cubbi

ответ

7

По умолчанию консоль Windows не обрабатывает широкие символы. Возможно, самый простой способ, чтобы включить эту функциональность, чтобы позвонить _setmode:

_setmode(_fileno(stdout), _O_WTEXT); 

См MSDN для требуемого включает в себя, примеры использования, а также другие доступные режимы.

Смежные вопросы