Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как включить поддержку кириллицы???


Автор: WebXL 14.1.2005, 12:27
Компилирую файл с кодом
--------
#include<iostream>
#include<stdio.h>

using namespace std;

void main()
{
cout<<"Привет!";
while(1);
}
---------

А в место "Привет!" выводятся непонятные символы, тогда как если написать "Hello!" то и выводится "Hello!".

Подскажите, пожалуйста, как включить поддержку кириллицы???

Автор: Adil' 14.1.2005, 13:03
Поддержка кирилици здесь не причем, просто у тебя консольное приложение, в котором используется DOS-кодировка символов, а в редакторе - Win1251
Можно использовать CharToOem и OemToChar
А можно сразу писАть cout<<"╧ЁштхЄ!"; smile

Автор: Dov 14.1.2005, 15:10
W2K. VC++6.0
У меня так работает:
Код

#include <windows.h>
void main()
{
   SetConsoleOutputCP(1251);
   ...
}

Автор: WebXL 14.1.2005, 15:11
Цитата(Adil @ 14.1.2005, 13:03)
Поддержка кирилици здесь не причем, просто у тебя консольное приложение, в котором используется DOS-кодировка символов, а в редакторе - Win1251
Можно использовать CharToOem и OemToChar
А можно сразу писАть cout<<"╧ЁштхЄ!"; smile

Спасибо!
Во всем разобрался. Извините, за глупую тему (но ведь я не первый и не последний чайник, на этом форуме уже есть такая тема, но там этого ответа так и не прозвучало :-)
Добавлено @ 15:20
Цитата(Dov @ 14.1.2005, 15:10)
W2K. VC++6.0
У меня так работает:
Код

#include <windows.h>
void main()
{
   SetConsoleOutputCP(1251);
   ...
}

А этот код к сожалению не заработал - ни ошибок - ни изменений, по прежнему другая кодировка.

Я нашел рабочий код:

Код

Данный пример иллюстрирует вывод русских строк в консоль через стандартный поток вывода.

Для этого нужно подключить "windows.h". Функция CharToOem выполняет преобразование.

Вот её синтаксис:

CharToOem(char * source, char * dest);

Первым параметром передаётся строка-источник, вторым - приёмник.

Преобразование нужно проводить только для вывода, для вывода в файл это делать не нужно.

-----------------------------------------------------------------------------------------

Автор примера: А. Зимин

E-Mail: [email protected]

URL: http://heavysoft.narod.ru

Программирование на C,C++,Visual C++, Blitz Basic. Статьи. Исходные коды.

- это всё найдёте на сайте.

*/

#include <iostream.h>

#include <fstream.h>

#include <windows.h> //нужна для функции CharToOem

void ConOut(char * str);

void FileOut(char * fname, char * str);

void main()

{

char string[]="Теперь консоль говорит по-русски!";

ConOut(string);

ConOut("\nCopyright (C) 2004 Heavysoft\nзаходите на наш сайт:\nhttp://heavysoft.narod.ru");

FileOut("Test.txt",string);

cin.get();

}

void ConOut(char * str)

{

char * buf=new char[strlen(str)];

CharToOem(str, buf); //преобразование

cout<<buf<<endl;

}

void FileOut(char * fname, char * str)

{

ofstream file(fname);

file<<str<<endl; //выводим в файл - преобразования не выполняем

}

Автор: Tripl-X 24.1.2005, 23:41
Попробуй печатать в шестнадцатеричном предстаклении...smile

Добавлено @ 23:42
Ошибочка...smile представлении

Автор: Adil' 25.1.2005, 12:42
Цитата(WebXL @ 14.1.2005, 15:11)
Код
void ConOut(char * str)

{

char * buf=new char[strlen(str)];

CharToOem(str, buf); //преобразование

cout<<buf<<endl;

}
Мда, вот те, бабушка, и Юрьев день... И такие исходники выкладываются как пример для подражания?...
Кто память-то освобождать будет? А.С.Пушкин? А место под 0-терминатор?
Код
void ConOut(char * str)
{
char * buf=new char[strlen(str)+1]; //"сишная длина" строки на 1 байт больше, чем strlen!
CharToOem(str, buf); //преобразование
cout<<buf<<endl;
delete[] buf;// Даёшь каждому new свой delete!
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)