Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.67
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
#1

Неправильный вывод кириллицы в консоль - C++

07.05.2011, 17:13. Просмотров 4717. Ответов 20
Метки нет (Все метки)

Здравствуйте уважаемые форумчане. Нуждаюсь в Вашем совете. Моя программа(ка ) выводит в консоль вместо кирилицы непонятные символы. При этом в файл все выводится как надо.
Что необходимо сделать что бы это исправить?

Не по теме:

такие действия как:SetConsoleCP(1251), SetConsoleOutputCP(1251);setlocale(LC_ALL,"Rus"); пробовал, не помогает

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
07.05.2011, 17:28     Неправильный вывод кириллицы в консоль #2
Попробуй транслитом писать. самый простой вариант
А если очень надо, читай прикреплённые темы про рус буквы. Или жди пока производители IDE добавят возможность кодировки cp866
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 17:41  [ТС]     Неправильный вывод кириллицы в консоль #3
Цитата Сообщение от BadBaddak Посмотреть сообщение
Попробуй транслитом писать. самый простой вариант
А если очень надо, читай прикреплённые темы про рус буквы. Или жди пока производители IDE добавят возможность кодировки cp866
Добавят возможность ? Я пользуюсь MinGw, в нем есть такая опция? Насчет транслита, это же не пишу, это мне функция возвращает строку. И почему же в файл выводит нормально ?
dan_strong
6 / 6 / 0
Регистрация: 28.12.2010
Сообщений: 113
07.05.2011, 17:56     Неправильный вывод кириллицы в консоль #4
прописывешь библиотеку <windows.h>, в мэйне пишешь: SetConsoleCP(1251); SetConsoleOutputCP(1251);
потом в свойствах командной строки выбери шрифт Lucida Console. должно помочь
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 17:59  [ТС]     Неправильный вывод кириллицы в консоль #5
Цитата Сообщение от dan_strong Посмотреть сообщение
прописывешь библиотеку <windows.h>, в мэйне пишешь: SetConsoleCP(1251); SetConsoleOutputCP(1251);
потом в свойствах командной строки выбери шрифт Lucida Console. должно помочь
В моем случае такой вариант не проходит.
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
07.05.2011, 18:05     Неправильный вывод кириллицы в консоль #6
Учи английский, пригодится... Ну или уже лучше последуй совету dan_strong! Это уж лучше, чем читать тупой транслит...

Добавлено через 1 минуту
dan_strong, лучше использовать
C++
1
#include <locale>
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:10  [ТС]     Неправильный вывод кириллицы в консоль #7
Mиxaил, Не очень Вас понял на счет английского, извините. Прием описаный dan_strong мне известен, но тут он не работает.

Добавлено через 3 минуты
Цитата Сообщение от Mиxaил Посмотреть сообщение
dan_strong, лучше использовать
C++
1
#include <locale>
C++
1
#include <locale>
тоже не помогает.
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
07.05.2011, 18:16     Неправильный вывод кириллицы в консоль #8
в какой среде работаете?
может
C++
1
2
3
    
 
#include <locale.h>
какой - нить
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.05.2011, 18:17     Неправильный вывод кириллицы в консоль #9
А вы просто подключаете и все?) Или ставите нужную локаль?)
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:18  [ТС]     Неправильный вывод кириллицы в консоль #10
Mиxaил, Пробовал компилировать в DEV C++, Code::Block, QT, VC++ 2010. Результат везде одинаков.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.05.2011, 18:18     Неправильный вывод кириллицы в консоль #11
C++
1
2
3
4
5
#include <iostream>
int main(){
    std::cout << "•Ґ««® ў®а«¤";
    return 0;
}
Попробуйте скомпилировать
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:24  [ТС]     Неправильный вывод кириллицы в консоль #12
Цитата Сообщение от ForEveR Посмотреть сообщение
А вы просто подключаете и все?) Или ставите нужную локаль?)
Вот в таком виде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//....
#include "windows.h"
#include <locale.h>
//.....
 
int main()
{
    //SetConsoleCP(866 );
   // SetConsoleOutputCP(866 );
    //setlocale(LC_ALL,"Rus");
     SetConsoleCP(1251);
    SetConsoleOutputCP(1251 );
    setlocale(LC_ALL,"Rus");
//  .....
}
Добавлено через 3 минуты
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
2
3
4
5
#include <iostream>
int main(){
    std::cout << "•Ґ««® ў®а«¤";
    return 0;
}
Попробуйте скомпилировать
Вывело Хелло ворлд
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.05.2011, 18:25     Неправильный вывод кириллицы в консоль #13
Тогда вам поможет CharToOem
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:32  [ТС]     Неправильный вывод кириллицы в консоль #14
diagon, Хм, интересно, сейчас попробую .

Добавлено через 5 минут
Цитата Сообщение от diagon Посмотреть сообщение
Тогда вам поможет CharToOem
Нет не помогло, символы поменялись, но остались нечитаемыми.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.05.2011, 18:37     Неправильный вывод кириллицы в консоль #15
Вышеприведенный текст в кодировке oem, возможно вы что-то неправильно делаете...
И это стоит использовать только при выводе на консоль, в файле такой текст будет нечитаемым.
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:40  [ТС]     Неправильный вывод кириллицы в консоль #16
Цитата Сообщение от diagon Посмотреть сообщение
Вышеприведенный текст в кодировке oem, возможно вы что-то неправильно делаете...
И это стоит использовать только при выводе на консоль, в файле такой текст будет нечитаемым.
В файл как раз выводит по человечески, но мне необходимо так же в консоль.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.05.2011, 18:43     Неправильный вывод кириллицы в консоль #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <windows.h>
char bufRus[256];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
 }
int main()  {
    std::cout << Rus("Хелло ворлд")<< endl;
    return 0;
}
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
07.05.2011, 18:45  [ТС]     Неправильный вывод кириллицы в консоль #18
diagon, Я сделал точно также. Но...
CVB
99 / 90 / 19
Регистрация: 22.03.2011
Сообщений: 226
08.10.2011, 19:20     Неправильный вывод кириллицы в консоль #19
Цитата Сообщение от dan_strong Посмотреть сообщение
прописывешь библиотеку <windows.h>, в мэйне пишешь: SetConsoleCP(1251); SetConsoleOutputCP(1251);
потом в свойствах командной строки выбери шрифт Lucida Console. должно помочь
Все работает! У меня начальная проблема была иная, но вконце стала такой как ваша(вывод кирилицы в консоли)... вот ссылка на мой топик http://www.cyberforum.ru/cpp-beginne...ml#post2052056
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 19:55     Неправильный вывод кириллицы в консоль
Еще ссылки по теме:
C++ Некорректный вывод кириллицы
C++ Ввод/вывод кириллицы
Неправильный вывод C++
неправильный вывод C++
Неправильный вывод C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
08.10.2011, 19:55     Неправильный вывод кириллицы в консоль #20
Я так решал эту проблему: добавляешь #include <iostream> и using namespace std; в исходный код, потом переопределяешь оператор вывода в поток:
C++
1
2
3
4
5
6
7
8
9
10
11
ostream &operator<<(ostream &stream, const char *str)
{
    char *outStr=new char[strlen(str)+1];
    CharToOemA(str,outStr);
    for (int i=0; outStr[i]!=0; i++)
    {
        stream<<outStr[i];
    }   
    delete[]outStr;
    return stream;
}
и выводишь, например, так: cout<<"Привет, мир!";

Добавлено через 6 минут
Да, ещё чуть не забыл, нужно добавить #include <windows.h> и #pragma comment(lib,"user32.lib")

Добавлено через 34 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// MyOutStr.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
#include <windows.h>
 
#pragma comment(lib,"user32.lib")
 
using namespace System;
using namespace std;
 
ostream &operator<<(ostream &stream, const char *str)
{
    char *outStr=new char[strlen(str)+1];
    CharToOemA(str,outStr);
    for (int i=0; outStr[i]!=0; i++)
    {
        stream<<outStr[i];
    }   
    delete[]outStr;
    return stream;
}
 
 
int main(array<System::String ^> ^args)
{
    cout<<"Привет, мир!";
    system("pause");
    return 0;
}
Yandex
Объявления
08.10.2011, 19:55     Неправильный вывод кириллицы в консоль
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru