|
|||||||
Русские буквы в консольных приложениях Qt под Windows
Время создания: 23.09.2018 12:37
Автор: Harrix, Xintrea
Текстовые метки: консоль, windows, cmd, qt, qt5, кодировка, кракозябры, русский, символ
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Локализация
Запись: xintrea/mytetra_syncro/master/base/1537695440x71kd3riyc/text.html на raw.github.com
|
|||||||
|
|||||||
В статье рассказывается об одном костыле для отображения русских букв в консольных приложениях Qt. В статье рассматривается приложение на основе Qt 5.4.0. В Qt версии 5 и выше поменялись некоторые настройки и стандартные костыли по отображению русских букв в консоли не работают. Суть проблемы. В стандартной консольной программе вместо русского текста будет выведены крякозабры: #include <iostream>
using namespace std;
int main(int argc, char *argv[]) { Q_UNUSED(argc); Q_UNUSED(argv); cout << "Привет!";
return a.exec(); } Решение. Прописываем нужные кодировки: #ifdef Q_OS_WIN32 QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866")); #endif
#ifdef Q_OS_LINUX QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); #endif Здесь нужно обратить внимание, что QTextCodec существует независимо от объекта QApplication. Объекта приложения вообще нет в этих примерах кода. Чтобы настройка QTextCodec работала, нужно еще подключить: #include <QTextCodec> А текст отображается в виде костыля: QString::fromUtf8("Текст").toLocal8Bit().data() Программа в итоге будет выглядеть так:
#include <iostream> #include <QTextCodec>
using namespace std;
int main(int argc, char *argv[]) { Q_UNUSED(argc); Q_UNUSED(argv);
#ifdef Q_OS_WIN32 QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866")); #endif
#ifdef Q_OS_LINUX QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); #endif
cout << QString::fromUtf8("Привет!").toLocal8Bit().data();
return 0; } Если используете переменные, то будет попроще: QString S="Здравствуйте!"; cout << S.toLocal8Bit().data(); Как можно еще упростить жизнь? В коде выше вывод шел в стандартную консоль cout. Но если выводить строки с использованием отладочного вывода, то никаких преобразований производит не надо: qDebug() << "Привет!"; То есть, достаточно настроить значение QTextCodec::setCodecForLocale(кодировка) , и вывод qDebug() будет автоматически преобразовываться из UTF-8 (ведь файлы исходников в Qt пишутся в UTF-8) в нужную кодировку. То же самое касается и qInfo(), qWarning(), qCritical(), qFatal(). |
|||||||
Так же в этом разделе:
|
|||||||
![]() |
|||||||
|
|||||||
|