C/C++ - Кирилица в консоли
-
Drongo
Re: C/C++ - Кирилица в консоли
SS3, Прочитайте с самого начала, возможно решение предложенное Durson'ом, вам подойдёт.
-
ganselo
Re: C/C++ - Кирилица в консоли
Видил в книге "Павловска ООП" пример написания класса для ввода/вывода кириллицы. Там при вызове cout/cin из заголовочного файла iostream.h подменялись на "наши" cout/cin и тем самым текст написанный на кириллице выводился нормально. Код проги предназначался для компиляции на Visual C++ 6.0. Увы данного компилятора у меня не было и поэтому я не смог потестировать(побывал компилировать на MinGW, но было куча не понятных ошибок).
-
Drongo
Re: C/C++ - Кирилица в консоли
вот что могу предложить:
Код: Выделить всё
#include <iostream>
#include <windows.h>
using namespace std;
char* convert(char* str)
{
char* s;
CharToOemA(str,s); // сама конвертация
return s;
}
int main(int argc, char* argv[])
{
cout<<convert("привет");
cin.get();
return 0;
}-
ganselo
Re: C/C++ - Кирилица в консоли
Alan85,
Цитата Alan85:
#include
#include
using namespace std;
char* convert(char* str)
{
char* s;
CharToOemA(str,s); // сама конвертация
return s;
}
int main(int argc, char* argv[])
{
cout
Цитата Alan85:
#include
#include
using namespace std;
char* convert(char* str)
{
char* s;
CharToOemA(str,s); // сама конвертация
return s;
}
int main(int argc, char* argv[])
{
cout
-
XEN_STRANGER
Re: C/C++ - Кирилица в консоли
вот что получилось:
Код: Выделить всё
// 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;
}-
Alan85
Re: C/C++ - Кирилица в консоли
вот что могу предложить:
Код: Выделить всё
#include <iostream>
#include <windows.h>
using namespace std;
char* convert(char* str)
{
char* s;
CharToOemA(str,s); // сама конвертация
return s;
}
int main(int argc, char* argv[])
{
cout<<convert("привет");
cin.get();
return 0;
}-
XEN_STRANGER
Re: C/C++ - Кирилица в консоли
сделал для Vista и XP одновременно (проверял на Vista SP1) :
Код:
А на Windows 7 7000 не пошло.. хз может потому что бета.
Код:
Код: Выделить всё
// 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;
}А на Windows 7 7000 не пошло.. хз может потому что бета.
-
Alan85
Re: C/C++ - Кирилица в консоли
Цитата XEN_STRANGER:
К сожалению ни один из способов, приведённых выше, у меня не прокатил
Попробуйте ещё так
К сожалению ни один из способов, приведённых выше, у меня не прокатил
C/C++ - Кирилица в консоли
Попробуйте ещё так
Код: Выделить всё
#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;
}-
Alan85
Re: C/C++ - Кирилица в консоли
Зачем так усложнять код программы, вот самый простой способ как отобразить в консоли русский язык:
Нужно открыть все волишь командную строку cmd.
Потом для удобства перейти на рабочий стол вот так:
cd "Рабочий стол"
Documents and Settings\hda0\Рабочий стол>
А дальше, все еще проще.
echo Привет, вот и русский язык в консоли > rus.txt
Всё.
На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю.
За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда!
Нужно открыть все волишь командную строку cmd.
Потом для удобства перейти на рабочий стол вот так:
cd "Рабочий стол"
Documents and Settings\hda0\Рабочий стол>
А дальше, все еще проще.
echo Привет, вот и русский язык в консоли > rus.txt
Всё.
На рабочем столе создаеться текстовый документ rus.txt и оттуда копируйте текст и вставляйте в cout или еще куда нибудь. Разве это не проще? Я так всегда делаю.
За дополнительной информацией можно посмотреть в справочнике Windows о перенаправлениях потока. Все думаю обьяснил все понятнее не куда!
