Qt creator ошибки кракозябры

Одно из возможных решений – скрыть для компилятора cl.exe файлы со строками языка ОС. В данном случае речь о локале ru-ru с идентификатором LCID, равным 1049. Полный список идентификаторов можно посмотреть здесь, стоит учесть, что там они указаны в шестнадцатеричном виде.

В зависимости от версии и разрядности компилятора, выбранного для Qt-проекта, расположение файла cl.exe может разниться. Например, для MSVC2015 64bit путь будет такой:

{Коренная папка Visual Studio}VCbinamd64

В MSVC2017 структура пути несколько иная:

{Коренная папка Visual Studio}VCToolsMSVC{версия}binHostx86x64

Имя конечной папки можно подсмотреть в настройках сборки проекта в QtCreator:

Compiler path

Для MSVC2017 x86_amd64, представленная на рисунке, будет как раз соответствовать Hostx86x64 (завершающая часть пути).

По этому пути достаточно переименовать папку «1049», например, добавив подчёркивание «1049_», после чего выполнить пересборку проекта. Сообщения компилятора будут выведены на английском языке:

warning C4311: 'type cast': pointer truncation from 'Qt::HANDLE' to 'unsigned int'
warning C4302: 'type cast': truncation from 'Qt::HANDLE' to 'unsigned int'

Стоит заметить, что наличие папки с английским языком, т.е. «1033», является необходимым для неанглоязычной ОС. Доустановить или удалить вовсе некоторые языки можно в установщике Visual Studio:

Установщик VS

Автор Тема: [РЕШЕНО] Кракозябры в окне ошибок нового Qt Creator и MSVC2015  (Прочитано 22793 раз)
gil9red

Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805

Просмотр профиля
WWW


Ставил недавно новый Qt, с ним в комплекте был уже и креатор, и компилятор.

При компиляции нашлись ошибки и их вид меня напрягает. Это он так кирилицу попытался отобразить? Как исправить?
Или научиться его ругаться на английском…

РЕШЕНИЕ:

переименовать файл:
%ProgramFiles(x86)%Microsoft Visual Studio 14.0VCbin1049clui.dll
в какой-нибудь clui.dll.bak
или удалить

выхлоп компилятора студии станет английским.

« Последнее редактирование: Декабрь 31, 2016, 00:40 от gil9red »
Записан

Bepec

Гость


Да падёт на тебя кара криворуких программистов, которые крестятся при виде кириллицы Веселый
хз как. Есть радикальный метод вроде полной пересборки креатора, но я чет не такой садомазохист Веселый


Записан
panAlexey

Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(

Просмотр профиля


ошибки в mainwindow.cpp — позор! Улыбающийся

« Последнее редактирование: Декабрь 30, 2016, 19:02 от panAlexey »
Записан

kambala


русская visual studio? замена на английскую поможет.

вообще никогда не использую русский интерфейс в средах разработки.


Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher

gil9red

Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805

Просмотр профиля
WWW


ошибки в mainwindow.cpp — позор!

В том примере mainwindow.cpp вообще пустой: http://ru.stackoverflow.com/questions/609515/
 Веселый

русская visual studio? замена на английскую поможет.

вообще никогда не использую русский интерфейс в средах разработки.

Я ничего кроме темной темы не настраивал специально — скачал и установил. Так что креатор уже был русскоязычным и у него уже был тот комплект

// UPDATE: ну да — у креатора стоит «системный язык», поэтому интерфейс тоже русскоязычный

А моя студия англоязычная:

« Последнее редактирование: Декабрь 30, 2016, 16:51 от gil9red »
Записан

kambala


переключение креатора на английский помогает?

з.ы. отличный кусок кода ты показал))


Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher

Bepec

Гость


Это великая тайна… Почему программисты Qt Creator’a не могут осилить toLocal8Bit() в консоли уже аж третью версию. Хотя в релизе всё нормально Веселый


Записан
panAlexey

Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(

Просмотр профиля


Мне на такой вопрос как-то ответили: не выпендривайся и ставь английскую студию.


Записан

Bepec

Гость


Да без разницы,это проблема именно креатора. Студия всегда нормально работала с кириллицей, начиная с 2008 полностью поддерживала в любой кодировке.


Записан
qate


я всегда учу все программы ругаться на английском просто: LC_MESSAGES=C
вот бы для венды также найти, не редко надо, потому не знаю как


Записан
Johnik

Крякер
****
Offline Offline

Сообщений: 339

Просмотр профиля


переименовать файл:
%ProgramFiles(x86)%Microsoft Visual Studio 14.0VCbin1049clui.dll
в какой-нибудь clui.dll.bak
или удалить

выхлоп компилятора студии станет английским.


Записан

Отображение русских символов в Qt

Отображение русских символов в Qt

Добрый день, читатель. По умолчанию русские символы в программах с использованием Qt фреймворка отображаются некорректно. Вместо них используются непонятные знаки. Эта проблема появляется при открытии исходников программ, при выводе русских букв в консоль, при выводе русских букв в виджеты (Label, PlainText и т.д.). В этой статье содержатся решения этих проблем. На сайте уже имеется статья, в которой показано решение проблемы отображения русских букв при выводе в консоль на C++.

Русские символы в исходном коде

Бывает возникает проблема с кодировкой при открытии исходных текстов программ в Qt Creator, чаще всего такая проблема возникает у пользователей Windows. Дело в том, что при написании программы исходники иногда сохраняются в одной кодировке, а редактор в Qt Creator открывает по умолчанию в другой кодировке. Из-за этого вместо русских букв появляются кракозябры или знаки вопроса. По умолчанию в настройках редактора кода Qt Creator кодировка файлов устанавливается System, т.е. кодировка операционной системы. Linux чаще всего использует UTF-8, а Windows cp1251.

Проблема с кодировкой в редакторе Qt Creator

Проблема с кодировкой в редакторе Qt Creator

Для решения проблемы в верхнем меню Qt Creator следует выбрать Инструменты(Tools) — Параметры…(Settings…). В открывшемся окне слева в списке найти и выбрать Текстовый редактор(Text Editor), далее выбираем вкладку Поведение(Behavior). Находим группу настроек Кодировки файлов(Encoding files) и выбираем кодировку по умолчанию(default) — UTF-8. Теперь редактор будет открывать исходники в UTF-8, исходные тексты программ чаще всего пишутся именно в этой кодировке.

После настройки редактора следует перекодировать сами исходники. Это можно сделать в Notepad++, если вы пользователь Windows.

Можно открывать файлы и в других кодировках, для этого в верхнем меню следует выбрать Правка — Выбрать кодировку, а далее найти кодировку, в которой был сохранен исходник программы.

В итоге редактор будет сохранять исходники в новых проектах в UTF-8 и корректно открывать их после.

Помещая русские символы в поле Text в виджете Label или в другие виджеты, можно также столкнуться с проблемой отображения русских букв. В редакторе форм русские символы в виджеты устанавливаются и отображаются нормально, а вот при установки программным путем — нет.

Поместим русские символы в виджет Label и в PushButton в редакторе форм.

Русские символы в редакторе форм Qt

Русские символы в редакторе форм Qt

Как видно, они отображаются корректно. Далее скомпилируем и запустим программу.

Отображение русских символов в виджетах

Отображение русских символов в виджетах

Отображение символов корректно. Теперь в изменим текст в виджетах программным путем, для этого в редакторе кода в файле mainwindow.cpp в конструктор добавим пару строк:

    ui->label->setText("Русские символы");
    ui->pushButton->setText("И здесь");

А затем скомпилируем и запустим программу.

Проблемы с отображением русских символов

Проблемы с отображением русских символов

Как видно, проблема имеет место быть, но решить ее очень легко.

Для этого устанавливаем текст с помощью функции trUtf8().

    ui->label->setText(trUtf8("Русские символы"));
    ui->pushButton->setText(trUtf8("И здесь"));

Скомпилируем и запустим программу.

Корректное отображение с trUtf8()

Корректное отображение с trUtf8()

Проблема решена, но если таких выводов в программе много, то вставка текста через функцию нерациональна с точки зрения времени. Можно решить проблему не прибегая к функции trUtf8(), для этого нужно лишь задать кодеки в программе. В файле main.cpp подключаем заголовок QTextCodec.

#include <QTextCodec>

В начало функции main.cpp добавляем следующие строчки:

    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);

Устанавливаем текст в виджетах в файле mainwindow.cpp без функции trUtf8()

    ui->label->setText("Русские символы");
    ui->pushButton->setText("И здесь");

Компилируем и запускаем.

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

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

Отображение символов корректно, теперь не нужно прибегать к функции trUtf8(). Проблема решена.

Кстати, в последних версиях Qt такой проблемы с кодировкой у меня не наблюдалось.

Для примера был создан стандартный проект Qt Widgets. Поэтому после решения проблем с кодировкой файл main.cpp содержит следующий код

#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Вывод русских символов в консоль с Qt

Если русские символы в консоль выводятся некорректно через qDebug(), то решение для этого такое же, как и решение с отображением русских символов в виджетах Qt.

А если Вы пишете без Qt и у вас проблемы русскими символами при выводе в консоль, то почитайте статью, там есть решение — Русские символы(буквы) при вводе/выводе в консоль на C++.

Надеюсь, что статья Вам чем-то помогла.

Спасибо за внимание.

Добрый день, друзья!

Не понятно? Вот и с Qt Creator‘ом так — о чем он там пишет на «русском» в консоли сборки — черт его знает… :-). Хотя здесь только «половина» его вины, а именно нежелание разработчиков «пофиксить» ситуацию, когда вывод вызываемого в консоли mingw32 идет в кодировке ibm866, а сам Qt Creator работает в кодировке cp1251. Конечно, проблемы нет для англоязычных разработчиков (ну и для тех, у кого «локаль» на ПК установлена в одной из вариации «английской»), но что же делать нам, истинным патриотам своего языка? :-) 

На форумах, посвященных Qt, есть несколько тем с означенной проблемой и парочкой возможных путей решения, основная идея которых это замена конфигурационных файлов самого Qt Creator‘а перед его компиляцией либо уже пропатчивание готового исполняемого файла. Больше всего решений связано с заменой файла jom.exe, ранее пропатченным одним умельцем b-s-a (например, тут можете ознакомиться более подробно). Хотя это, по сути, справедливо для компилятора от Visual Studio, а у нас тут все же mingw32 :-). 

Поэтому, если Вам не помогли способы описанные на ресурсах указанных выше, предлагаю ознакомиться и с моим решением данной проблемы… «костыльным» решением … но имеющим право на существование ;-).

Итак, основная идея — заставить командную строку Windows возвращать текст в кодировке cp1251 вместо ibm866. Для этих целей в арсенале самой операционной системы есть такая утилита как chcp.com.  Ее использование весьма тривиальное:

chcp номер_кодировки

Т.е. чтобы сменить кодировку командной строки (cmd.exe) на нужную нам cp1251, достаточно набрать команду:

chcp 1251

Одно плохо — изменения затрагивают только тот «экземпляр» шелла, в котором была набрана команда. Каждый новый «экземпляр» будет иметь кодировку «по-умолчанию» т.е. ibm866. И тут на помощь приходит

Чип & Дейл

одна замечательная особенность командной строки Windows — возможность задавать команды «автозапуска» (команды которые будут выполнятся при старте каждого «экземпляра» cmd.exe). Собственно это и решает нашу проблему — командная строка возвращает весь поток в нужной нам кодировке. Где же задать эту команду? А все там же — в реестре Windows. 

Ваша задача — найти ветку реестра «HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor» и создать в ней новый   Расширяемый строковый параметр (тип «reg_expand_sz») «AutoRun«, которому присвойте значение «chcp 1251 1>nul«. Все. Теперь каждый запуск командной строки Windows будет приводить к выполнению указанной команды «chcp 1251 1>nul» — и нам гарантировано обеспечена нужная кодировка. Правда «кракозябры» уже будут у всех остальных консольных приложений Windows, например, тот же ipconfig — их то вывод так и остался в кодировке ibm866. Можно, конечно, принудительно теперь уже возвращать нужную нам кодировку командой:

chcp 866

но это же «не наш метод» :-). Поэтому предлагаю Вашему вниманию вариант с BAT файлом, где сначала задается нужный нам параметр реестра, затем запускается Qt Creator, а по окончании его работы созданное нами значение реестра «AutoRun» удаляется:

@echo off
reg add "HKCUSoftwareMicrosoftCommand Processor" /v AutoRun /t reg_expand_sz /d "chcp 1251 1>nul" /f
C:Qtqtcreator-2.5.0binqtcreator.exe
reg delete "HKCUSoftwareMicrosoftCommand Processor" /v AutoRun /f

только строчку с запуском Qt Creator не забудьте заменить на свою.

Можно было бы на этом остановится, но, для любителей эстетики, я хотел бы еще предложить «усовершенствовать» вариант такого запуска Qt Creator‘а без навязчивого «черного окна» консоли, «висящего» до окончания работы. И здесь нашим помощником снова становится сама ОС Windows, а точнее Visual Basic Script. Для этого нам будет необходимо создать обычный текстовый файл, при сохранении которого указать расширение «VBS» (и это ОЧЕНЬ важно). Например, у меня это файл — «

runme.vbs

«. А в качестве содержимого указать вот такой код:

set WShell = CreateObject("WScript.shell")
ACode = WShell.Run("cp1251.bat", 0, false)

где, cp1251.bat — имя нашего ранее созданного BAT файла (у Вас оно может быть, конечно же, другим). Ну и самое главное — оба этих файла (BAT и VBS) должны находится в одной директории :-).

Теперь уже точно все, осталось только поменять ярлык для запуска Qt Creator‘а с «

qtcreator.exe

» на созданный нами «

runme.vbs

» и наслаждаться русскими сообщениями от MinGW :-).

И на последок пару замечаний:

1) учтите, что пока работает Qt Creator запущенный таким образом, каждая новая консоль будет иметь кодировку cp1251;

2) будьте внимательны — Ваши средства защиты могут блокировать запуск файла VBS.

Ну, вроде бы, ничего не забыл — до новых встреч! ;-)

p/s знаете более красивый способ решения проблемы? Обязательно напишите в комментарии :-).

Одно из возможных решений – скрыть для компилятора cl.exe файлы со строками языка ОС. В данном случае речь о локале ru-ru с идентификатором LCID, равным 1049. Полный список идентификаторов можно посмотреть здесь, стоит учесть, что там они указаны в шестнадцатеричном виде.

В зависимости от версии и разрядности компилятора, выбранного для Qt-проекта, расположение файла cl.exe может разниться. Например, для MSVC2015 64bit путь будет такой:

{Коренная папка Visual Studio}VCbinamd64

В MSVC2017 структура пути несколько иная:

{Коренная папка Visual Studio}VCToolsMSVC{версия}binHostx86x64

Имя конечной папки можно подсмотреть в настройках сборки проекта в QtCreator:

Compiler path

Для MSVC2017 x86_amd64, представленная на рисунке, будет как раз соответствовать Hostx86x64 (завершающая часть пути).

По этому пути достаточно переименовать папку «1049», например, добавив подчёркивание «1049_», после чего выполнить пересборку проекта. Сообщения компилятора будут выведены на английском языке:

warning C4311: 'type cast': pointer truncation from 'Qt::HANDLE' to 'unsigned int'
warning C4302: 'type cast': truncation from 'Qt::HANDLE' to 'unsigned int'

Стоит заметить, что наличие папки с английским языком, т.е. «1033», является необходимым для неанглоязычной ОС. Доустановить или удалить вовсе некоторые языки можно в установщике Visual Studio:

Установщик VS

Отображение русских символов в Qt

Отображение русских символов в Qt

Добрый день, читатель. По умолчанию русские символы в программах с использованием Qt фреймворка отображаются некорректно. Вместо них используются непонятные знаки. Эта проблема появляется при открытии исходников программ, при выводе русских букв в консоль, при выводе русских букв в виджеты (Label, PlainText и т.д.). В этой статье содержатся решения этих проблем. На сайте уже имеется статья, в которой показано решение проблемы отображения русских букв при выводе в консоль на C++.

Русские символы в исходном коде

Бывает возникает проблема с кодировкой при открытии исходных текстов программ в Qt Creator, чаще всего такая проблема возникает у пользователей Windows. Дело в том, что при написании программы исходники иногда сохраняются в одной кодировке, а редактор в Qt Creator открывает по умолчанию в другой кодировке. Из-за этого вместо русских букв появляются кракозябры или знаки вопроса. По умолчанию в настройках редактора кода Qt Creator кодировка файлов устанавливается System, т.е. кодировка операционной системы. Linux чаще всего использует UTF-8, а Windows cp1251.

Проблема с кодировкой в редакторе Qt Creator

Проблема с кодировкой в редакторе Qt Creator

Для решения проблемы в верхнем меню Qt Creator следует выбрать Инструменты(Tools) — Параметры…(Settings…). В открывшемся окне слева в списке найти и выбрать Текстовый редактор(Text Editor), далее выбираем вкладку Поведение(Behavior). Находим группу настроек Кодировки файлов(Encoding files) и выбираем кодировку по умолчанию(default) — UTF-8. Теперь редактор будет открывать исходники в UTF-8, исходные тексты программ чаще всего пишутся именно в этой кодировке.

После настройки редактора следует перекодировать сами исходники. Это можно сделать в Notepad++, если вы пользователь Windows.

Можно открывать файлы и в других кодировках, для этого в верхнем меню следует выбрать Правка — Выбрать кодировку, а далее найти кодировку, в которой был сохранен исходник программы.

В итоге редактор будет сохранять исходники в новых проектах в UTF-8 и корректно открывать их после.

Помещая русские символы в поле Text в виджете Label или в другие виджеты, можно также столкнуться с проблемой отображения русских букв. В редакторе форм русские символы в виджеты устанавливаются и отображаются нормально, а вот при установки программным путем — нет.

Поместим русские символы в виджет Label и в PushButton в редакторе форм.

Русские символы в редакторе форм Qt

Русские символы в редакторе форм Qt

Как видно, они отображаются корректно. Далее скомпилируем и запустим программу.

Отображение русских символов в виджетах

Отображение русских символов в виджетах

Отображение символов корректно. Теперь в изменим текст в виджетах программным путем, для этого в редакторе кода в файле mainwindow.cpp в конструктор добавим пару строк:

    ui->label->setText("Русские символы");
    ui->pushButton->setText("И здесь");

А затем скомпилируем и запустим программу.

Проблемы с отображением русских символов

Проблемы с отображением русских символов

Как видно, проблема имеет место быть, но решить ее очень легко.

Для этого устанавливаем текст с помощью функции trUtf8().

    ui->label->setText(trUtf8("Русские символы"));
    ui->pushButton->setText(trUtf8("И здесь"));

Скомпилируем и запустим программу.

Корректное отображение с trUtf8()

Корректное отображение с trUtf8()

Проблема решена, но если таких выводов в программе много, то вставка текста через функцию нерациональна с точки зрения времени. Можно решить проблему не прибегая к функции trUtf8(), для этого нужно лишь задать кодеки в программе. В файле main.cpp подключаем заголовок QTextCodec.

#include <QTextCodec>

В начало функции main.cpp добавляем следующие строчки:

    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);

Устанавливаем текст в виджетах в файле mainwindow.cpp без функции trUtf8()

    ui->label->setText("Русские символы");
    ui->pushButton->setText("И здесь");

Компилируем и запускаем.

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

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

Отображение символов корректно, теперь не нужно прибегать к функции trUtf8(). Проблема решена.

Кстати, в последних версиях Qt такой проблемы с кодировкой у меня не наблюдалось.

Для примера был создан стандартный проект Qt Widgets. Поэтому после решения проблем с кодировкой файл main.cpp содержит следующий код

#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Если русские символы в консоль выводятся некорректно через qDebug(), то решение для этого такое же, как и решение с отображением русских символов в виджетах Qt.

А если Вы пишете без Qt и у вас проблемы русскими символами при выводе в консоль, то почитайте статью, там есть решение — Русские символы(буквы) при вводе/выводе в консоль на C++.

Надеюсь, что статья Вам чем-то помогла.

Спасибо за внимание.

Добрый день, друзья!

Не понятно? Вот и с Qt Creator‘ом так — о чем он там пишет на «русском» в консоли сборки — черт его знает… :-). Хотя здесь только «половина» его вины, а именно нежелание разработчиков «пофиксить» ситуацию, когда вывод вызываемого в консоли mingw32 идет в кодировке ibm866, а сам Qt Creator работает в кодировке cp1251. Конечно, проблемы нет для англоязычных разработчиков (ну и для тех, у кого «локаль» на ПК установлена в одной из вариации «английской»), но что же делать нам, истинным патриотам своего языка? :-)  

На форумах, посвященных Qt, есть несколько тем с означенной проблемой и парочкой возможных путей решения, основная идея которых это замена конфигурационных файлов самого Qt Creator‘а перед его компиляцией либо уже пропатчивание готового исполняемого файла. Больше всего решений связано с заменой файла jom.exe, ранее пропатченным одним умельцем b-s-a (например, тут можете ознакомиться более подробно). Хотя это, по сути, справедливо для компилятора от Visual Studio, а у нас тут все же mingw32 :-). 

Поэтому, если Вам не помогли способы описанные на ресурсах указанных выше, предлагаю ознакомиться и с моим решением данной проблемы… «костыльным» решением … но имеющим право на существование ;-).

Итак, основная идея — заставить командную строку Windows возвращать текст в кодировке cp1251 вместо ibm866. Для этих целей в арсенале самой операционной системы есть такая утилита как chcp.com.  Ее использование весьма тривиальное:

chcp номер_кодировки

Т.е. чтобы сменить кодировку командной строки (cmd.exe) на нужную нам cp1251, достаточно набрать команду:

chcp 1251

Одно плохо — изменения затрагивают только тот «экземпляр» шелла, в котором была набрана команда. Каждый новый «экземпляр» будет иметь кодировку «по-умолчанию» т.е. ibm866. И тут на помощь приходит

Чип & Дейл

одна замечательная особенность командной строки Windows — возможность задавать команды «автозапуска» (команды которые будут выполнятся при старте каждого «экземпляра» cmd.exe). Собственно это и решает нашу проблему — командная строка возвращает весь поток в нужной нам кодировке. Где же задать эту команду? А все там же — в реестре Windows. 

Ваша задача — найти ветку реестра «HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor» и создать в ней новый   Расширяемый строковый параметр (тип «reg_expand_sz») «AutoRun«, которому присвойте значение «chcp 1251 1>nul«. Все. Теперь каждый запуск командной строки Windows будет приводить к выполнению указанной команды «chcp 1251 1>nul» — и нам гарантировано обеспечена нужная кодировка. Правда «кракозябры» уже будут у всех остальных консольных приложений Windows, например, тот же ipconfig — их то вывод так и остался в кодировке ibm866. Можно, конечно, принудительно теперь уже возвращать нужную нам кодировку командой:

chcp 866

но это же «не наш метод» :-). Поэтому предлагаю Вашему вниманию вариант с BAT файлом, где сначала задается нужный нам параметр реестра, затем запускается Qt Creator, а по окончании его работы созданное нами значение реестра «AutoRun» удаляется:

@echo off
reg add "HKCUSoftwareMicrosoftCommand Processor" /v AutoRun /t reg_expand_sz /d "chcp 1251 1>nul" /f
C:Qtqtcreator-2.5.0binqtcreator.exe
reg delete "HKCUSoftwareMicrosoftCommand Processor" /v AutoRun /f

только строчку с запуском Qt Creator не забудьте заменить на свою.

Можно было бы на этом остановится, но, для любителей эстетики, я хотел бы еще предложить «усовершенствовать» вариант такого запуска Qt Creator‘а без навязчивого «черного окна» консоли, «висящего» до окончания работы. И здесь нашим помощником снова становится сама ОС Windows, а точнее Visual Basic Script. Для этого нам будет необходимо создать обычный текстовый файл, при сохранении которого указать расширение «VBS» (и это ОЧЕНЬ важно). Например, у меня это файл — «

runme.vbs

«. А в качестве содержимого указать вот такой код:

set WShell = CreateObject("WScript.shell")
ACode = WShell.Run("cp1251.bat", 0, false)

где, cp1251.bat — имя нашего ранее созданного BAT файла (у Вас оно может быть, конечно же, другим). Ну и самое главное — оба этих файла (BAT и VBS) должны находится в одной директории :-).

Теперь уже точно все, осталось только поменять ярлык для запуска Qt Creator‘а с «

qtcreator.exe

» на созданный нами «

runme.vbs

» и наслаждаться русскими сообщениями от MinGW :-).

И на последок пару замечаний:

1) учтите, что пока работает Qt Creator запущенный таким образом, каждая новая консоль будет иметь кодировку cp1251;

2) будьте внимательны — Ваши средства защиты могут блокировать запуск файла VBS.

Ну, вроде бы, ничего не забыл — до новых встреч! ;-)

p/s знаете более красивый способ решения проблемы? Обязательно напишите в комментарии :-).

Автор Тема: [РЕШЕНО] Кракозябры в окне ошибок нового Qt Creator и MSVC2015  (Прочитано 21771 раз)
gil9red

Ставил недавно новый Qt, с ним в комплекте был уже и креатор, и компилятор.

При компиляции нашлись ошибки и их вид меня напрягает. Это он так кирилицу попытался отобразить? Как исправить?
Или научиться его ругаться на английском…

РЕШЕНИЕ:

переименовать файл:
%ProgramFiles(x86)%Microsoft Visual Studio 14.0VCbin1049clui.dll
в какой-нибудь clui.dll.bak
или удалить

выхлоп компилятора студии станет английским.

« Последнее редактирование: Декабрь 31, 2016, 00:40 от gil9red »
Записан

Bepec

Гость


Да падёт на тебя кара криворуких программистов, которые крестятся при виде кириллицы Веселый
хз как. Есть радикальный метод вроде полной пересборки креатора, но я чет не такой садомазохист Веселый


Записан
panAlexey

Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(

Просмотр профиля


ошибки в mainwindow.cpp — позор! Улыбающийся

« Последнее редактирование: Декабрь 30, 2016, 19:02 от panAlexey »
Записан

kambala

русская visual studio? замена на английскую поможет.

вообще никогда не использую русский интерфейс в средах разработки.


Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher

gil9red

ошибки в mainwindow.cpp — позор!

В том примере mainwindow.cpp вообще пустой: http://ru.stackoverflow.com/questions/609515/
 Веселый

русская visual studio? замена на английскую поможет.

вообще никогда не использую русский интерфейс в средах разработки.

Я ничего кроме темной темы не настраивал специально — скачал и установил. Так что креатор уже был русскоязычным и у него уже был тот комплект

// UPDATE: ну да — у креатора стоит «системный язык», поэтому интерфейс тоже русскоязычный

А моя студия англоязычная:

« Последнее редактирование: Декабрь 30, 2016, 16:51 от gil9red »
Записан

kambala

переключение креатора на английский помогает?

з.ы. отличный кусок кода ты показал))


Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher

Bepec

Гость


Это великая тайна… Почему программисты Qt Creator’a не могут осилить toLocal8Bit() в консоли уже аж третью версию. Хотя в релизе всё нормально Веселый


Записан
panAlexey

Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(

Просмотр профиля


Мне на такой вопрос как-то ответили: не выпендривайся и ставь английскую студию.


Записан

Bepec

Гость


Да без разницы,это проблема именно креатора. Студия всегда нормально работала с кириллицей, начиная с 2008 полностью поддерживала в любой кодировке.


Записан
qate

я всегда учу все программы ругаться на английском просто: LC_MESSAGES=C
вот бы для венды также найти, не редко надо, потому не знаю как


Записан
Johnik

Крякер
****
Online Online

Сообщений: 336

Просмотр профиля


переименовать файл:
%ProgramFiles(x86)%Microsoft Visual Studio 14.0VCbin1049clui.dll
в какой-нибудь clui.dll.bak
или удалить

выхлоп компилятора студии станет английским.


Записан

Кракозябры в консоли сборки при использовании MSVC Express 2010 (русский) , Qt Creator 2.4.1 (Qt 4.8.1), Win 10.

По факту cl.exe выдает в 866 кодировке комментарии к ошибкам типа такого варианта:

:-1: ошибка: C2065: NUL: ­Ґ®Ўкпў«Ґ­­л© Ё¤Ґ­вЁдЁЄ в®а

Пытались удалять русск. версию MSVS 2010 Espress, устанавливали Ultimate, Professinal, но все они как назло были русские.

Все оказалось проще. Нам помог выбор в параметрах Windows 10 языка ENGL!

:-1: error: C2065: 'NUL' : undeclared identifier

Следующий вариант — кракозябры в консоли при запуске программы, у которой используются библиотеки openssl , собранные из исходников стандартно через батники (где консоль была chcp 866).

Дело в том, что там в исходниках openssl есть дебаг вывод параметров сертификатов, которые содержат в том числе и не латинские символы.

Тут надо понимать, что сертификаты читаются из хранилища Windows. И оказывается есть сертификаты в кодировке 1251, а stdout куда они выводятся в кодировке 866. Как-то так наверное.

Чтобы вывод в stdout был правильным (читаемым) можно в программе указать :

QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866"));

И тогда мы увидим в консоли примерно такое:

expiredCerts CommonName :  "УЦ ФГУП ГНИВЦ ФНС России"   "Ср 2. сен 10:04:00 2020"

Не понятно почему в 2022г. Windows использует кодировку локали 866, 1251. Почему бы не использовать UTF8 ….

  • Quicktime ошибка при установке
  • Qt creator ошибка при сборке развертывании проекта
  • Quicktime ошибка cab файл
  • Qt creator ошибка при запуске приложения 0xc000007b
  • Quicktime выдает ошибку при установке