Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: cheops (09.01.2012 в 01:34) Уже не раз и не два возникали темы, как выводить русский язык в консольных программах. Особенно, это актуально в отношении UNICODE-программ. Уж больно заманчиво использовать только UNICODE-вызовы и UNICODE-проекты, не переключаясь в однобайтовую кодировку ради русского языка, тем более, что UNICODE его прекрасно поддерживает. Представляю вашем вниманию еще один способ (для Visual Studio C++, где все это актуально), который правда потребует более глубокого погружения в Windows API, в котором есть функция WriteConsole(), позволяющая выводить русский текст в UNICODE. Придется конечно, сначала получить дескриптор консоли и корректно подсчитать количество символов (напоминаю, что sizeof ту уже не обойтись), но можно получить сразу русский текст, без переключения кодировки консоли и проекта в однобайтовый режим (что изрядно утомляет, да и вообще сколько можно).
#include <Windows.h> #include <iostream> #define ElementCount(x) (sizeof(x)/sizeof(x[0])) using namespace std; int main() { int i; HANDLE hStdOut; DWORD dwWritten; wchar_t str[] = L"Выводим фразу на русском языке\r\n"; // Получаем дескриптор консоли hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if(hStdOut == INVALID_HANDLE_VALUE) { MessageBox( NULL, L"Ошибка получения дескриптора консоли", L"Ошибка консольного вывода", MB_OK | MB_ICONINFORMATION); return GetLastError(); } // Выводим строку str // Количество символов в строке за минусом \0 if(!WriteConsole( hStdOut, &str, ElementCount(str) - 1, &dwWritten, NULL)) { MessageBox( NULL, L"Ошибка консольного вывод на русском языке", L"Ошибка консольного вывода", MB_OK | MB_ICONINFORMATION); return GetLastError(); } system("pause"); return 0; }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: