Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка консоли, Вывести русские буквы 
V
    Опции темы
Hvoin
Дата 8.6.2008, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



установил
Код

SetConsoleOutputCP(1251);

после
1. Вместо для продолжения нажмите любую клавишу... в консоле появляются каракули
2. При выводе
Код

cout<<"Русская кодировка";

выводятся каракули
Как сделать, чтобы при использование cout выводились нормальные буквы в консоле?
Английские выводятся нормально
(часто использовать CharToOem() неудобно)
Работаю на vs2005 c++
PM MAIL   Вверх
mes
Дата 8.6.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



.866


--------------------
PM MAIL WWW   Вверх
anatox91
Дата 8.6.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



можно написать мини-оболочку для CharToOem(), поищи, где-то на форуме уже было
нашел, короче вот:
Код

char * rus(char * str) {
    char * buf = new char [strlen(str)];
    CharToOem(str, buf);
    return buf;
}

и пользуешься:
Код

char *p;
std::cout << (p = rus("русский текст")) << std::endl;
delete[] p; //не забывай освобождать память, она ведь выделяется динамически


еще вариант (но там надо немного подправить, память не освобождается)

Это сообщение отредактировал(а) anatox91 - 8.6.2008, 09:41


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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Hvoin
Дата 8.6.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Код

class primer{
string Name;
void show(){
cout<<"Имя"<<a.Name<<endl;
}}

после
Код

primer a;
a.Name="Ваня";
a.show();

Выводятся каракули, можно ли перегрузить оператор, чтоб были нормальные русские буквы?


PM MAIL   Вверх
anatox91
Дата 8.6.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Код

class primer{
string Name;
void show(){
CharToOem(Name.c_str(), Name.c_str());
cout<<"Имя"<< Name <<endl;
} 
}



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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Rififi
Дата 8.6.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Hvoin, 
Код
const char* loc = "Russian_Russia.ACP";
std::locale ru(loc);

setlocale(LC_ALL, loc);
std::cout.imbue(ru);

std::cout << "Имя" << std::endl;

PM MAIL   Вверх
Hvoin
Дата 8.6.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Код

class primer{
string Name;
int age;
friend ostream &operator<<(ostream &stream,  primer &B)
{
char *str=(*char)B.Name;
char * buf = new char [strlen(str)];
CharToOem(str, buf);
stream<<buf<<" "<<age;
return stream;
}
}

так выводит нормально русские буквы
Код

cout<<a;

можно перегрузить оператор << так чтобы работал нормально вариант выше и ниже 
Код

cout<<a.Name;



Это сообщение отредактировал(а) Hvoin - 8.6.2008, 21:46
PM MAIL   Вверх
anatox91
Дата 9.6.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Hvoin, а смысл? если у тебя нормально выводится и так? чтобы так работало, надо перегрузить оператор << для класса string





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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
d06osipov
Дата 9.6.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.11.2006

Репутация: нет
Всего: нет



Либо писать исходные файлы в cp866 либо в консоли перед запуском программы выполнить chcp 1251 (или установить 1251 как кодовую страницу Windows по-умолчанию).
PM MAIL   Вверх
susanin
Дата 10.6.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 7



я просто пишу в начале проги setlocale(LC_ALL, "rus");
PM MAIL   Вверх
anatox91
Дата 11.6.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



susanin, это срабатывает не у всех, например у меня это ничего не меняет, крякозябры как были, так и остались

Это сообщение отредактировал(а) anatox91 - 11.6.2008, 08:27


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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
susanin
Дата 12.6.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 7



anatox91, ну значит я везучий избранный! smile 
а вообще я просто предложил.... 
PM MAIL   Вверх
andrew_121
Дата 12.6.2008, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



У меня Русские выводятся правильно.
Использую MultiByteToOemString()


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.