Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 11:17   #1
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию Изменение кодировки в консоли. MS Visual Studio

Установил себе Visual Studio 2010, и собственно возникла проблема. Я для теста написал программу, чтобы она мне на русском выдала в консольку какую-нибудь надпись. Собственно результат очевиден - она мне выдала туда корявый текст, из-за несовпадения кодировок. Я думаю потому что в консольке DOS кодировка, а туда подается ANSII.

Вопрос, как мне сделать так, чтобы или консолька запускалась с ANSII кодировкой, или текст туда подавался с DOS кодировкой сразу.

P.S.
Пользовался поиском по запросам:
"Смена кодировки Visual Studio"
"Смена кодировки консоли"
"Как изменить кодировку (С++)"
и пр. Не нашел ничего внятного
Так что не ругайтесь.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 01.08.2011, 11:47   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Уж сколько раз твердили миру...

Код:
setlocale( LC_ALL,"Russian" );
p51x вне форума Ответить с цитированием
Старый 01.08.2011, 11:49   #3
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Надо учить английский. Ща буду разбираться

------------чуть позже-----------

Спасибо. Прочитал, понял всё через слово, но код - он интернационален. Суть в setlocale
Еще раз большое спасибо, вопрос себя исчерпал
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 01.08.2011 в 11:53.
MooNDeaR вне форума Ответить с цитированием
Старый 01.08.2011, 20:07   #4
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Цитата:
Еще раз большое спасибо, вопрос себя исчерпал
Когда-то я тоже, найдя такой вариант решения этой проблемы, говорил, что вопрос себя исчерпал.
Но это пока не познакомился со структурами. Моему огорчению не было предела, когда я увидел часть русского текста в нормальном виде, а часть в виде "корявого текста".

Вот к примеру простенький код
Код:
#include <iostream>
using std::cout;
using std::cin;

int main()
{
	setlocale(LC_ALL, "Russian");
//объявляем структуру Аэрофлот
	struct AEROFLOT
	{
		char kudaletim[30];
		char planetype[10];
	};
	AEROFLOT Bort[2];

//вводим значения структуры AEROFLOT
	for (int i=0; i<=1; i++)
	{
		cout<<"Введите пункт назначения рейса "<<(i+1)<<" \n";
			cin>>Bort[i].kudaletim;
		cout<<"Введите тип самолёта\n";
			cin>>Bort[i].planetype;
	}
//Вывод введённых данных
	cout<<"-Пункт назначения-      -тип самолёта-\n";
	for(int i=0; i<=1;i++)
         cout<<Bort[i].kudaletim<<"  "<<Bort[i].planetype<<"\n";
	cin.get();
	cin.get();
	return 0;
}
FelixXXI вне форума Ответить с цитированием
Старый 01.08.2011, 21:07   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

FelixXXI, структуры здесь ни при чем. Когда изменяешь локаль, то начинаются проблемы с вводом. Проверь такой код:
Код:
setlocale(LC_ALL, "Russian");
string str1;
cout << "Введите: ";
cin >> str1;
cout << "Вы ввели: " << str1;
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 01.08.2011, 22:35   #6
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
FelixXXI, структуры здесь ни при чем. Когда изменяешь локаль, то начинаются проблемы с вводом. Проверь такой код:
Код:
setlocale(LC_ALL, "Russian");
string str1;
cout << "Введите: ";
cin >> str1;
cout << "Вы ввели: " << str1;
Ребят, эта проблема решается использованием функции OemToChar, которая лежит в заголовочном файле "windows.h".

Код:
#include <windows.h>
#include <locale.h>
...
setlocale(LC_ALL, "Russian");
char str[20];
cout << "Введите текст: " << endl;
cin.getline(str,20);
OemToChar(str,str);
cout << "Вы ввели:" << endl << str << endl;
...
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 01.08.2011 в 22:38.
MooNDeaR вне форума Ответить с цитированием
Старый 01.08.2011, 23:26   #7
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Цитата:
FelixXXI, структуры здесь ни при чем.
Действительно, структуры - ни при чём. При чём - только то, что я столкнулся с этой проблемой, когда изучал структуры: и на тот момент решил перейти на латинские буквы.

Сейчас я делаю по-другому:
В код добавляю
либо
Цитата:
system( "chcp 1251" );
system ( "cls" );
либо
Цитата:
#include <windows.h>
...
SetConsoleCP (1251);
SetConsoleOutputCP (1251);
После запуска программы, в окне консоли жму правой кнопкой мыши кнопочку в верхнем левом углу. И там выбираю Свойства-Шрифт-Lucida Console

Но лучше писать латинскими буквами.

Последний раз редактировалось FelixXXI; 01.08.2011 в 23:53.
FelixXXI вне форума Ответить с цитированием
Старый 01.08.2011, 23:32   #8
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
#include <windows.h>
...
SetConsoleCP (1251);
SetConsoleOutputCP (1251);
не знал. Надо будет попробовать.

P.S.

1251 - эт я понял числовой код кодировки ANSI ?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 01.08.2011, 23:42   #9
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

1251 - набор символов и кодировка, являющаяся стандартной кодировкой для всех русских версий Windows.
Цитата:
Надо будет попробовать.
отмечу ещё раз о необходимости проделать манипуляцию "Свойства-Шрифт-Lucida Console "
FelixXXI вне форума Ответить с цитированием
Старый 02.08.2011, 02:17   #10
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

В общем что-то мне ничего не помогло Не мой метод, ни один из ваших. Поэтому не поленился и написал:

Код:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <clocale>
using namespace std;

void Rus_1251(char* in, char* out)
{
	int len = strlen(in);
	for(int i = 0; i < len; i++)
	{
		unsigned char simb = (*in);
		if((simb>=128)&&(simb<=175))
			simb += 64;
		else
		if((simb>=224)&&(simb<=239))
			simb += 16;
		*out = simb;
		out++;
		in++;
	}
}
int main(void)
{
	char s[50];
	setlocale(LC_ALL,"Russian");
	cout << "Русский заголовок!" << endl;
	cin.getline(s,50);    //ввод текста.
	Rus_1251(s,s);
	cout << endl << s;
	system("PAUSE");
}
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посимвольное считывание из файла. Проблема кодировки. Кириллица в консоли. SrgGld Общие вопросы C/C++ 0 16.11.2010 20:34
Изменение кодировки в c# Andreyka Общие вопросы C/C++ 0 04.06.2010 19:42
Изменение кодировки Ilya9999 PHP 2 27.05.2010 19:59
Visual Studio Standard 2008 против Visual Studio Express 2008. Стоит ли покупать? Casper-SC Софт 4 31.12.2009 11:46
VISUAL STUDIO 2008 defaul language - как переключить в VISUAL STUDIO 2008 язык программирования, использ Эйнж Общие вопросы C/C++ 0 27.12.2009 20:39