С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/90: Рейтинг темы: голосов - 90, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 24.11.2011
Сообщений: 24

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

26.11.2011, 21:51. Показов 18771. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Консольное приложение запускается под Windows, там кодировка IBM 866. В программе используются функции ввода вывода из стандартной библиотеке Си. Как можно организовать вывод строк на русском?

Добавлено через 23 минуты
Тоесть текст программы написан в одной кодировке, в том числе и строки на русском языке, но вывести на экран их надо в кодировке IBM 866, есть ли в QT функции для конвертации символов?
В качестве строк используются массивы char ограниченные нулём.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2011, 21:51
Ответы с готовыми решениями:

Как вывести русские буквы в консольном приложении без Qt ?
Пробовал менять кодировки, но не помогло. #include <iostream> using namespace std; int main(int argc, char *argv) { ...

Как вывести граф в delphi (не консольном приложении)
Вопрос в названии темы) Есть задание, связанное с графами, делать я его еще не начал, до этого хотел бы узнать - как вывести граф?...

Греческие буквы в консольном приложении
Интересует возможность в консольной программе выводить на экран греческие буквы, такие как лямбда, альфа, бета и тому подобные. ...

8
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.11.2011, 23:01
QTextCodec тебе поможет есть у же тут обсуждалось...:
в функции main:

C++
1
2
3
 QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8");
 QTextCodec::setCodecForTr(utfcodec);
 QTextCodec::setCodecForCStrings(utfcodec);
но это если средствами Qt
0
 Аватар для Lupus
24 / 24 / 4
Регистрация: 13.03.2011
Сообщений: 326
27.11.2011, 00:45
Кстати с консолью (по крайней мере у меня) было всё намного хуже
После долгих мучений сработала только такая конструкция:
C++
1
2
3
4
5
6
QTextCodec::setCodecForTr(QTextCodec::codecForName("Utf-8"));
 
    QTextStream inC(stdin),outC(stdout);
    outC.setCodec("IBM866");   //нужная кодировка на консоль
 
    outC << QObject::tr("-----------------Тестовое задание №2-----------------") << endl << endl;
И да, как мне когда-то верно подсказывал Чистый, код программы должен быть сохранен в кодировке Utf-8.
0
 Аватар для SleepMaster
40 / 40 / 7
Регистрация: 26.11.2011
Сообщений: 80
27.11.2011, 04:43
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <locale>
 
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Привет мир!";
return 0;
}

Не по теме:

Прочитал только название темы и сразу решил помочь :). Но вижу, что не помогу. :(

1
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
27.11.2011, 11:02
Lupus, под виндой действительно нужно использовать кодировку IBM866. А под линуксом, - UTF-8 (если все терминалы в такой кодировке символы выводят). Под какой ОС запустилась программа можно узнать с помощью макросов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QTextCodec>
#include <QTextStream>
 
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextStream inC(stdin),outC(stdout);
    
    #ifdef Q_OS_WIN32
        outC.setCodec("IBM866");
    #endif
 
    #ifdef Q_OS_LINUX
        outC.setCodec("UTF-8");
    #endif
        
    outC << QObject::tr("Йоу чувак!") << endl;
}
Добавлено через 8 минут
Про эти макросы - http://doc.qt.nokia.com/latest/qtglobal.html и в книге Бланшета, Саммерфилда Qt4: программирование GUI на C++. Глава "Возможности, зависимые от платформы". Параграф "Применение родных программных интерфейсов"
0
1 / 1 / 0
Регистрация: 24.11.2011
Сообщений: 24
27.11.2011, 11:36  [ТС]
Цитата Сообщение от SleepMaster Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <locale>
 
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Привет мир!";
return 0;
}

Не по теме:

Прочитал только название темы и сразу решил помочь :). Но вижу, что не помогу. :(

Спасибо, на вывод работает, а как сделать ввод?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <iostream>
#include <locale>
 
int main(int argc, char *argv[])
{
    char str[100];
 
    setlocale(LC_ALL, "Russian");
 
    std::cout << "Привет Мир!\n";
    std::cin >> str;
    std::cout << str << std::endl;
 
    printf("Привет Мир!\n");
    scanf("%s", str);
    printf("%s\n", str);
 
    return 0;
}
Вывод

Привет Мир!
тест
в?бв
Привет Мир!
тест
в?бв

Добавлено через 16 минут
Цитата Сообщение от Евгений М. Посмотреть сообщение
Lupus, под виндой действительно нужно использовать кодировку IBM866. А под линуксом, - UTF-8 (если все терминалы в такой кодировке символы выводят). Под какой ОС запустилась программа можно узнать с помощью макросов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QTextCodec>
#include <QTextStream>
 
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextStream inC(stdin),outC(stdout);
    
    #ifdef Q_OS_WIN32
        outC.setCodec("IBM866");
    #endif
 
    #ifdef Q_OS_LINUX
        outC.setCodec("UTF-8");
    #endif
        
    outC << QObject::tr("Йоу чувак!") << endl;
}
Добавлено через 8 минут
Про эти макросы - http://doc.qt.nokia.com/latest/qtglobal.html и в книге Бланшета, Саммерфилда Qt4: программирование GUI на C++. Глава "Возможности, зависимые от платформы". Параграф "Применение родных программных интерфейсов"
Работает на вывод, а как сделать ещё и ввод?

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
#include <QTextCodec>
#include <QTextStream>
#include <QObject>
 
int main(int argc, char *argv[])
{
    char str[100];
 
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QTextStream inC(stdin),outC(stdout);
 
    #ifdef Q_OS_WIN32
            outC.setCodec("IBM866");
    #endif
 
    #ifdef Q_OS_LINUX
            outC.setCodec("UTF-8");
    #endif
 
    outC << QObject::tr("Привет Мир!") << endl;
    inC >> str;
    outC << str;
 
    return 0;
}
Вывод 1

Привет Мир!
test
test

Вывод 2

Привет Мир!
тест

(строка из входного потока не выводится, если она написана русскими буквами)
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
27.11.2011, 11:39
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
#include <QTextCodec>
#include <QTextStream>
#include <QString>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
#endif
 
#ifdef Q_OS_LINUX
const char* codecName = "UTF-8";
#endif
 
int main(int argc, char *argv[])
{
    QString text;
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextStream inC(stdin),outC(stdout);
    
    inC.setCodec(codecName);
    outC.setCodec(codecName);
    
    inC >> text;
    outC << text << endl;
}
Под Ubuntu работает как нужно.
1
1 / 1 / 0
Регистрация: 24.11.2011
Сообщений: 24
27.11.2011, 12:21  [ТС]
Цитата Сообщение от Евгений М. Посмотреть сообщение
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
#include <QTextCodec>
#include <QTextStream>
#include <QString>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
#endif
 
#ifdef Q_OS_LINUX
const char* codecName = "UTF-8";
#endif
 
int main(int argc, char *argv[])
{
    QString text;
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextStream inC(stdin),outC(stdout);
    
    inC.setCodec(codecName);
    outC.setCodec(codecName);
    
    inC >> text;
    outC << text << endl;
}
Под Ubuntu работает как нужно.
Вот теперь работает на ввод и вывод, большое спасибо

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
#include <QTextCodec>
#include <QTextStream>
#include <QObject>
#include <QString>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
const char* textCodecName = "Windows-1251";
#endif
 
#ifdef Q_OS_LINUX
const char* codecName = "UTF-8";
const char* textCodecName = "UTF-8";
#endif
 
int main(int argc, char *argv[])
{
    QString text;
    QTextCodec::setCodecForTr(QTextCodec::codecForName(textCodecName));
    QTextStream inC(stdin),outC(stdout);
 
    inC.setCodec(codecName);
    outC.setCodec(codecName);
 
    outC << QObject::tr("Привет Мир!") << endl;
    inC >> text;
    outC << text << endl;
 
    return 0;
}
Вывод

Привет Мир!
тест
тест

Добавлено через 15 минут
А как можно это сделать, но с использованием массивов char и функций scanf() и printf()?
0
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
28.11.2011, 10:51
ты уверен, что тебе именно Qt нужен?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2011, 10:51
Помогаю со студенческими работами здесь

Не отображаются русские буквы в приложении на VC++.NET
Не отображаются русские буквы в заголовках меню. Вместо них обычные зюки, как при слетевших кодировках. Помогите пожалуйста настроить...

Как вывести в массив русские буквы?
k = input() result =

Как вывести Русские буквы в строке?
Помогите пожалуйста ребят, не знаю как вывести русскую строку в консоли :( #include &quot;pch.h&quot; #include &lt;iostream&gt; ...

Как вывести русские буквы в заголовок консоли?
Использую такую конструкцию: setlocale(LC_ALL, &quot;Russia&quot;); static const TCHAR* myTitle = TEXT(&quot;Генератор паролей &quot;); ...

Вывести таблицу с заголовком в консольном приложении
Как сделать такое в консольном приложении? Нужно организовать запись данных в файл прямого доступа, через диалоговое окно, и вывести...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru