|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кирилица в консоли |
|
C/C++ - Кирилица в консоли
|
Новый участник Сообщения: 18 |
Профиль | Отправить PM | Цитировать
Как сделать, чтобы консольные проги, написанные на С++, понимали русский... Я вообще новичок в программинге, можно по подробней??? Заранее спасибо!
|
|
------- Отправлено: 11:02, 25-12-2003 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Зачем так усложнять код программы, вот самый простой способ как отобразить в консоли русский язык:
Нужно открыть все волишь командную строку cmd. Потом для удобства перейти на рабочий стол вот так: cd "Рабочий стол" <Enter> Documents and Settings\hda0\Рабочий стол>[/i] А дальше, все еще проще. echo Привет, вот и русский язык в консоли > rus.txt Всё. На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю. За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда! |
Последний раз редактировалось Drongo, 03-02-2009 в 10:09. Причина: Сделал чуть-чуть читабельнее Отправлено: 00:36, 03-02-2009 | #51 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать Я в C++ новичёк, пишу простенькую прогу Win32 console Application (запускается она не в windows-окне,а в командной строке). Так вот при выводе на экран текста на русском, кириллические символы не отображаются, точне выводятся каляки. Например:
cout << "Введите число от 1 до 10" << endl; Фраза на кирилице не пашет, а писать русские слова английскими буквами не прилично. Помню, что кто-то делал поддержку кирилицы, но как???????????????? |
Отправлено: 21:44, 20-03-2009 | #52 |
Забанен Сообщения: 463
|
|
Отправлено: 22:30, 20-03-2009 | #53 |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать Alan85,
Цитата Alan85:
Alan85, Admiral, hda0, Drongo, Durson, YackoN, Busla, ganselo, SS3, К сожалению ни один из способов, приведённых выше, у меня не прокатил (возможно я делаю что-то не так)... Кто-нибудь объясните пошагово, я начал заниматься с++ только 3 месяца назад и мне только 15 лет. Как вывести в консоли: #include <iostream> #include <windows.h> using namespace std; int main() { cout << "Ура, получилось!" << endl; return 0; } Моя прога очень длинная и там очень много cout <<'оф, поэтому нужно сделать так, чтобы не пришлось всё переписывать, а добавить в заголовке какой-нить include. Вобщем если так нельзя то всё равно помогите.... Кодю я в Microsoft Visual C++ 6.0 Моя прога во вложении. |
|
Последний раз редактировалось XEN_STRANGER, 23-02-2011 в 09:45. Отправлено: 13:51, 21-03-2009 | #54 |
Забанен Сообщения: 463
|
вот что получилось:
// Windows XP SP3; BDS 2006; 21.03.2009; // основано на материале с http://cboard.cprogramming.com/showthread.php?p=745558 #include <iostream> #include <windows.h> using namespace std; typedef BOOL (WINAPI *SETCONSOLEFONT)(HANDLE, DWORD); // прототип недокументированый функции SETCONSOLEFONT SetConsoleFont; int main(int argc, char* argv[]) { HMODULE hmod = GetModuleHandleA("KERNEL32.DLL"); // функция здесь SetConsoleFont =(SETCONSOLEFONT) GetProcAddress(hmod, "SetConsoleFont"); // берем ее адрес if (!SetConsoleFont) {cout<<"error\n" ; exit(1);} // если ошибка SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),10); // устанавливаем 10 шрифт.. //эксперементально установил что в обычной XP это Lucida Console 14. //хз везде это ли - покажет практика. SetConsoleOutputCP(1251) ; // устанавливаем кодировку вывода cout<<"по русски :)"; cin.get(); return 0; } |
Отправлено: 18:55, 21-03-2009 | #55 |
Забанен Сообщения: 463
|
В Vista и Windows 7 не работает
|
Отправлено: 19:19, 21-03-2009 | #56 |
Забанен Сообщения: 463
|
сделал для Vista и XP одновременно (проверял на Vista SP1) :
// Windows XP SP3; BDS 2006; 21.03.2009; // основано на материале с http://cboard.cprogramming.com/showthread.php?p=745558 // http://msdn.microsoft.com/en-us/library/ms686200(VS.85).aspx #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; } |
Отправлено: 20:22, 21-03-2009 | #57 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата XEN_STRANGER:
#include <iostream> #include <windows.h> using namespace std; // Функция перекодировки в кирилицу char* rus(char* st) { unsigned char* p = st; // при объявлении символов как char русские буквы // кодируются отрицательными числами while( *p ){ if(*p >= 192) // здесь русская буква if(*p <= 239) *p -= 64; else *p -= 16; p++; } return st; } int main() { cout << rus("Ура, получилось!") << endl; cin.get(); return 0; } |
|
------- Отправлено: 20:46, 21-03-2009 | #58 |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать Alan85, Ура, спасибо тебе великое
Drongo, А твой пример при компиляции ссылается на: error C2440: 'initializing' : cannot convert from 'char *' to 'unsigned char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Error executing cl.exe. |
Отправлено: 20:52, 21-03-2009 | #59 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Зачем так усложнять код программы, вот самый простой способ как отобразить в консоли русский язык:
Нужно открыть все волишь командную строку cmd. Потом для удобства перейти на рабочий стол вот так: cd "Рабочий стол" <Enter> Documents and Settings\hda0\Рабочий стол> А дальше, все еще проще. echo Привет, вот и русский язык в консоли > rus.txt Всё. На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю. За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда! |
Отправлено: 21:08, 21-03-2009 | #60 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Кирилица на DVD | Guest | Хочу все знать | 3 | 08-05-2004 14:59 | |
Кирилица и ересь | bdn | Microsoft Windows 95/98/Me (архив) | 3 | 20-01-2004 14:02 | |
странная кирилица | dreamparadise | Программирование и базы данных | 2 | 28-07-2003 12:33 | |
Кирилица в прогах | Alex VZ | Общий по Linux | 20 | 19-07-2003 17:09 | |
Кирилица и Сидиром | Pink Punk | Общий по Linux | 11 | 14-03-2003 06:03 |
|