Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
1

Как заставить консоль корректно отображать русский язык под виндой?

13.09.2018, 11:21. Просмотров 1142. Ответов 6

Знаю,что этот вопрос обсуждался уже тысячи раз,но я так и не нашел универсального способа.Использую компилятор mingw64 без ide(в блокноте).Нужно вывести русский язык в консоль командой cout.Очевидно,что результатом получаю абракадабру.Способ с изменением шрифта на lucida console не рассматриваю,т.к программа может запускаться на других пк.Способ с изменением локали не работает.Не работает также способ с изменение кодировки командой SetConsoleCP(1251) и SetConsoleOutputCP(1251).Подскажите универсальный способ,буду благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2018, 11:21
Ответы с готовыми решениями:

Как заставить консоль понимать русский язык? (русские шрифты в консоли)
Добрый вечер. Нужна ваша помощь С++ не понимает русский язык

Как заставить g++ корректно отображать русскую раскладку?
Такой метод, как#include <locale> setlocale(LC_ALL, "Russian"); не срабатывает. Заранее благодарен!

Русский язык в консоль
Привет всем, не знаю куда ещё это отнести(модеры сори если не сюда и если доставил больше работы)...

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой...

6
Модератор
Эксперт CЭксперт С++
5021 / 2203 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
13.09.2018, 11:28 2
Цитата Сообщение от GreyCat Посмотреть сообщение
Подскажите универсальный способ,буду благодарен
GreyCat, переходи на операционную систему на базе ядра GNU/Linux с вменяемым терминалом - это единственный универсальный способ. В винде пока что, к сожалению, только костыли.
Либо скачивай майкрософтовскую IDE - MS Visual Studio 2017. Там вполне себе адекватно (вроде бы) работает вывод в консоль текста на русском:
0
Миниатюры
Как заставить консоль корректно отображать русский язык под виндой?  
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
13.09.2018, 11:50  [ТС] 3
Цитата Сообщение от sourcerer Посмотреть сообщение
GreyCat, переходи на операционную систему на базе ядра GNU/Linux с вменяемым терминалом
Linux стоит в качестве второй системы,но мне необходимо писать ПО для основной массы юзеров,а это,к сожалению,пользователи винды.
Цитата Сообщение от sourcerer Посмотреть сообщение
Либо скачивай майкрософтовскую IDE - MS Visual Studio 2017
Никогда не любил эту IDE. Как же компилятор mcvс отображает русский язык?
0
Модератор
Эксперт CЭксперт С++
5021 / 2203 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
13.09.2018, 12:10 4
Цитата Сообщение от GreyCat Посмотреть сообщение
Никогда не любил эту IDE. Как же компилятор mcvс отображает русский язык?
Не знаю.
0
Миниатюры
Как заставить консоль корректно отображать русский язык под виндой?  
Эксперт С++
8170 / 3770 / 811
Регистрация: 15.11.2014
Сообщений: 8,566
13.09.2018, 12:18 5
Цитата Сообщение от GreyCat Посмотреть сообщение
Способ с изменением шрифта на lucida console не рассматриваю,т.к программа может запускаться на других пк.
виндузятники должны страдать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <windows.h>
using namespace std;
 
typedef struct _CONSOLE_FONT_INFOEX {
  ULONG cbSize;
  DWORD nFont;
  COORD dwFontSize;
  UINT  FontFamily;
  UINT  FontWeight;
  WCHAR FaceName[LF_FACESIZE];
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
 
typedef BOOL (WINAPI *SETCONSOLEFONT)(HANDLE, DWORD);     // прототип недокументированый функции для XP
 
typedef BOOL (WINAPI *SETCURRENTCONSOLEFONTEX)(HANDLE,BOOL, PCONSOLE_FONT_INFOEX);  // для vista
SETCURRENTCONSOLEFONTEX SetCurrentConsoleFontEx  ;
SETCONSOLEFONT SetConsoleFont;
 
int main(int argc, char* argv[])
{
  OSVERSIONINFOEX osvi;
  CONSOLE_FONT_INFOEX cfon;
  ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  GetVersionEx((OSVERSIONINFO *) &osvi) ;   // получение версии винды
  HMODULE hmod = GetModuleHandleA("KERNEL32.DLL");     // функции здесь
  if (osvi.dwMajorVersion<6) {     // xp или ниже : для 9x не проверял.
     SetConsoleFont =(SETCONSOLEFONT) GetProcAddress(hmod, "SetConsoleFont");   // берем  адрес функции
     if (!SetConsoleFont) {cout<<"error\n" ; exit(1);}   //   если ошибка
     SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),10);  // устанавливаем 10 шрифт..
    //эксперементально установил что в обычной XP  это Lucida  Console 14.
    //хз везде это ли - покажет практика.
 
  }  else
  {
     SetCurrentConsoleFontEx =(SETCURRENTCONSOLEFONTEX) GetProcAddress(hmod, "SetCurrentConsoleFontEx");   // берем  адрес  функции
     if (!SetCurrentConsoleFontEx) {cout<<"error\n" ; exit(1);}   //   если ошибка
     ZeroMemory(&cfon, sizeof(CONSOLE_FONT_INFOEX));
     cfon.cbSize=sizeof(CONSOLE_FONT_INFOEX);
     //cfon.nFont=10;
     cfon.FontFamily=54;   //   Lucida  Console
     if (!SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), false, &cfon)) cout<<"error";
  }
 
  SetConsoleOutputCP(1251) ;  // устанавливаем кодировку вывода
  cout<<"по русски :)";
  cin.get();
  return 0;
}
0
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
13.09.2018, 22:45  [ТС] 6
Чего-то компилятор ругается
C:\Users\Admin>g++ C:\Users\Admin\Desktop\project\main.cpp -oC:\Users\Admin\Desk
top\project\main.exe
C:\Users\Admin\Desktop\project\main.cpp:5:16: error: redefinition of 'struct _CO
NSOLE_FONT_INFOEX'
typedef struct _CONSOLE_FONT_INFOEX {
^~~~~~~~~~~~~~~~~~~~
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-re
v0/mingw64/x86_64-w64-mingw32/include/windows.h:74,
from C:\Users\Admin\Desktop\project\main.cpp:2:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/x86_64-w64-
mingw32/include/wincon.h:297:16: note: previous definition of 'struct _CONSOLE_F
ONT_INFOEX'
typedef struct _CONSOLE_FONT_INFOEX {
^~~~~~~~~~~~~~~~~~~~
C:\Users\Admin\Desktop\project\main.cpp:12:3: error: conflicting declaration 'ty
pedef int CONSOLE_FONT_INFOEX'
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
^~~~~~~~~~~~~~~~~~~
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-re
v0/mingw64/x86_64-w64-mingw32/include/windows.h:74,
from C:\Users\Admin\Desktop\project\main.cpp:2:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/x86_64-w64-
mingw32/include/wincon.h:304:3: note: previous declaration as 'typedef struct _C
ONSOLE_FONT_INFOEX CONSOLE_FONT_INFOEX'
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
^~~~~~~~~~~~~~~~~~~
C:\Users\Admin\Desktop\project\main.cpp:12:25: error: conflicting declaration 't
ypedef int* PCONSOLE_FONT_INFOEX'
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
^~~~~~~~~~~~~~~~~~~~
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-re
v0/mingw64/x86_64-w64-mingw32/include/windows.h:74,
from C:\Users\Admin\Desktop\project\main.cpp:2:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/x86_64-w64-
mingw32/include/wincon.h:304:25: note: previous declaration as 'typedef struct _
CONSOLE_FONT_INFOEX* PCONSOLE_FONT_INFOEX'
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
^~~~~~~~~~~~~~~~~~~~
C:\Users\Admin\Desktop\project\main.cpp:17:25: error: 'BOOL (* SetCurrentConsole
FontEx)(HANDLE, BOOL, PCONSOLE_FONT_INFOEX)' redeclared as different kind of sym
bol
SETCURRENTCONSOLEFONTEX SetCurrentConsoleFontEx ;
^~~~~~~~~~~~~~~~~~~~~~~
In file included from C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-re
v0/mingw64/x86_64-w64-mingw32/include/windows.h:74,
from C:\Users\Admin\Desktop\project\main.cpp:2:
C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/x86_64-w64-
mingw32/include/wincon.h:370:27: note: previous declaration 'WINBOOL SetCurrentC
onsoleFontEx(HANDLE, WINBOOL, PCONSOLE_FONT_INFOEX)'
WINBASEAPI WINBOOL WINAPI SetCurrentConsoleFontEx(
^~~~~~~~~~~~~~~~~~~~~~~
C:\Users\Admin\Desktop\project\main.cpp: In function 'int main(int, char**)':
C:\Users\Admin\Desktop\project\main.cpp:37:103: error: assignment of function 'W
INBOOL SetCurrentConsoleFontEx(HANDLE, WINBOOL, PCONSOLE_FONT_INFOEX)'
SetCurrentConsoleFontEx =(SETCURRENTCONSOLEFONTEX) GetProcAddress(hmod, "S
etCurrentConsoleFontEx"); // ╨▒╨╡╤01;31m^
0
649 / 209 / 20
Регистрация: 20.05.2016
Сообщений: 870
Записей в блоге: 14
14.09.2018, 10:21 7
Под Винду делал следующее...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2018, 10:21

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

mingw+ WindowsXP+ юникод+ консоль+ русский язык+ Dev-Cpp. Вот надо разобраться со всем этим благолепием
Не слабо нам решить эту проблему? В общем, всё, что ест в гугле я пробовал, бесполезно. Всякие там...

Как заставить сайт переходить на другуюязычную версия, если язык браузер не русский?
Написал так: &lt;script type=&quot;text/javascript&quot;&gt; var lang = navigator.language ||...

Изменение локализации проекта под русский язык
У меня при компиляции ехе файла весь текст на украйнском, а мне надо на русском. Помогите...

Как корректно отображать русское меню в VB?
Как корректно отображать русское меню? (Получаются какие-то иероглифы)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.