Андрей Борус

Кодировка в QtCreator

Работая в QtCreator при использовании компилятора от Visual Studio 2010, столкнулся с проблеммой кодировки окна "сообщения сборки". Вместо русских букв там были "кракозяблы". Причём сообщения от компилятора выводились в неправильной кодировке, а сообщения от утилиты сборки nmake выводились нормально.

Пример:


QtCreator с неправильной кодировкой Окно QtCreator - сообщения сборки в неправильной кодировке

Оказалось, что сообщения компилятора печатались в кодировке DOS (866) так, как будто мы запускали его из консоли.

Для исправления ситуации была написана маленькая утилита jom, которая решила проблему с кодировкой. Утилита jom является заменой оригинальной утилиты jom, которая якобы распределяла процесс компиляции на несколько ядер процессора. (К слову сказать, компилятор Visual Studio 2010 полностью использует ядра.) В этой утилите выбирается правильная кодовая страница консоли - Windows CP1251, и запускается утилита nmake

Результат:


QtCreator с правильной кодировкой Окно QtCreator - сообщения сборки в правильной кодировке

Скачать утилиту

Версия x86: jom.exe x86

Версия x64: jom.exe x64

Установка и настройка

Скопируйте утилиту в какую-нибудь директорию поиска по-умолчанию, например, в директорию Qt/bin, туда, где находится утилита qmake. После этого в меню QtCreator-а зайдите в "Инструменты -> Параметры -> Проекты" и установите последнюю галочку "использовать jom вместо nmake" (рисунок):

Параметры проекта QtCreator

Исходный код:

Показать

Скачать


Комментарии:

Добавить комментарий

Иван
4.12.2016 9:34
Спасибо, Андрей! Спас день!
Harrix
31.7.2016 18:6
Написал подробную статью как исправить jom файл http://blog.harrix.org/article/5888
StingX
17.4.2016 21:42
Давно уже не запускал cset_fix. Сейчас проверил на Win10 x64 (vs2013 + Qt5.5.1 + QtCreator 3.6.0) - работает.

С cset_fix есть только одна проблема (с самого начала была): после инжекта в процесс QtCreator перестает работать отладка.
Иван
14.4.2016 13:7
Спасибо большое, помогло.
комплект MSVS_2013, Qt Creator 5.6
Harrix
10.4.2016 19:50
На Visual Studio 2015 в Windows 10 и Qt 5.6.0 qt_creator_cset_fix не помогает.
АлексАндр
29.3.2016 18:18
спасибо, помогло)
Иван
14.1.2016 15:56
На данный момент ничего лучше qt_creator_cset_fix к сожалению нет. Зато работает с любыми версиями qtcreator-а.
Александр
27.4.2015 8:30
FresherTM способ помог, спасибо
NoctuaArcticum
15.4.2015 13:14
Не просветите в каких настройках проекта в QtCreator-е 3.3 заменить путь к Jom.exe на путь к нашему .bat-файлу?
FresherTM
23.1.2015 20:39
Есть способ без замены бинарника и с русскими комментариями:
пишем .bat файл примерно следующего содержания:

@echo off
chcp 1251 > nul
C:\path\to\jom.exe %*

В QtCreator в настройках проекта заменяем путь к jom.exe на путь к нашему .bat файлу.
Неизвестный
24.12.2013 14:33
RTFM:
https://bugreports.qt-project.org/browse/QTCREATORBUG-316?focusedCommentId=107079&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-107079
Рустем
19.8.2013 9:33
Спасибо за совет. Qt5.1.0, компилятор MSVC2012 x64, Windows 7 x64. Всё заработало после замены jom.exe старого на jom.exe новый
Михаил
6.8.2013 0:2
Константин Штепа в комментариях предложил (http://codedchaos.blogspot.ru/2012/09/qt-creator-windows.html) рабочее решение ...
1) Скачиваете исходники jom c http://qt.gitorious.org/qt-labs/jom/ или с помощью git://gitorious.org/qt-labs/jom.git
2) Находите в них файл \src\app\main.cpp
3) Заменяете в нём строки
4) int main(int argc, char* argv[])
{
int result = 0;

на

int main(int argc, char* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int result = 0;

5) Далее запускаете командную строку разработчика vs2012(или аналогичное), переходите в корневую папку jom и выполняете команды qmake и nmake. Далее просто копируете файлы из папки %jom%\bin\ в папку %qt-creator%\bin
Алекс
31.7.2013 23:48
Qt Creator 5.1.0 +VS2012
После замены jom.exe проект перестает компилироваться. Единственное ошибка которая появляется это "Не удалось запустить программу. Путь или права недопустимы?"
Konstantin
21.6.2013 11:53
Кракозябры можно вылечить без замены jom.
Для этого нужно отредактировать файл
%QTDIR%\mkspecs\common\shell-win32.conf
в каждой строке после '=' добавляем 'chcp 1251>nul &&'.
Должно получиться на подобии этого:
QMAKE_COPY = chcp 1251>nul && copy /y

Всё! Для существующих проектов запускаем qmake и любуемся русским описанием ошибок.

Diffor
21.6.2013 6:34
Только вот такая замена jom сильно тормозит сборку на многоядерниках. Основная фича jom, как раз в многопоточной сборке с автоматической подстройкой по количеству ядер, а тут один поток и всё :(
cimex
11.6.2013 0:21
Понял В новой версии это называется "Сборка и запуск".
cimex
10.6.2013 23:14
"Инструменты -> Параметры -> Проекты" Нет такого? Как быть?
Lixo
1.5.2013 4:51
Спасибо, все чётко работает. Но, что делать, если я вообще не хочу чтобы эти сообщения переводились на русский язык. По мне, так гораздо удобнее, когда все сообщения об ошибках на английском, их тогда проще обгугливать
volooodya
1.5.2013 0:27
спасибо, помогло и на VS2012 компиляторе
Альберт
9.4.2013 9:25
Благодарю!
Я тоже подумал, что не работает, но потом просто убрал стандартный файл отсюда
Tools\QtCreator\bin
и после все пишет на русском.


Ответ:

Да, стандартный файл jom.exe необходимо заменить
Александр
3.4.2013 20:33
Огромное спасибо за .exe и подробную инструкцию!
Все работает на ура!
man
6.3.2013 16:44
Спасибо разработчикам! Проблема решилась. Creator 2.4.1 + msvc 2008 W7 x86
VityOK
3.3.2013 18:50
Огроменнейшое спасибо!
А то, никак не разобрать, где сделал ошибку.
Сергей
26.2.2013 16:5
спасибо большое... помогло...;)
Dorian
15.2.2013 19:10
СПАСИБО!
elisevgeniy
10.2.2013 19:27
Спасибо, win7x32, vs2010, qt 5.0.0 (qt creater 2.6.1) всё работает :)
Lion
27.1.2013 20:40
Помогает, но не использует многопоточную сборку, из-за чего по скорости равен nmake.

Ответ:

да
Аноним
23.1.2013 2:19
Пацаны, не запускайте! Брата стёрло в кашу, пишу с микроволновки.
Laurent
6.1.2013 20:25
Браво! Работает. Спасибо!
Неизвестный
16.11.2012 17:24
обсуждение:
https://codereview.qt-project.org/#change,30405
решение:
http://stingx.ru/public/qt_creator_cset_fix.rar
Неизвестный
16.11.2012 17:23
Проголосовал.
Есть ссылка в которой идет обсуждение патча и там же ссылка на работающее решение.
У меня на win7-64 + mcvs-2010 + 2.6.0 работает
Иван
16.11.2012 11:52
Давайте голосуем все за исправление бага в Qt Creator-e!
https://bugreports.qt-project.org/browse/QTCREATORBUG-316
Евгений
8.10.2012 9:19
Не помогло =(
Creator 2.4.1
MSVC 2008
Alexander
18.9.2012 22:59
Сразу после замены JOM иероглифы превратились в читаемый текст. Полезная утилитка.
frost
5.9.2012 1:26
пишет:
missing separator. Stop
Makefile.Debug
и не компилируется
SanSuSan
29.8.2012 2:47
а можно особо и не мучаться, а поставить английскую версию VS и текст ошибок будет на английском, как и оно и должно быть )
Иван
27.8.2012 12:37
Спасибо! Вот только есть баг. Ваша версия не поддерживает параметр -j
grin
21.8.2012 1:15
Спасибо =) выручил
Angry Alex
14.8.2012 18:26
Вот гады! Нет бы сразу правильно все сделать :-(
Alex
2.4.2012 11:8
to sanaforever:

Юзаю и вроде все нормально. Если чего не будет компилиться, можете вернуться к старой версии с кракозяблами и проверить, что все также не работает. :)
sanaforewer
23.3.2012 21:4
помогло!
но!
логичен вопрос- с офф сайта качаю последнюю версию- там 500-600кб (и не работает), а тут 7,5кб))))))

какова вероятность возникновения в дальнейшем проблем со сборкой??
сами то ей пользуетесь?
Просто я новичек в Qt и ни в жизнь не догадаюсь если че не откомпилируется, что ошибка в использовании этой утилиты
Неизвестный
23.3.2012 1:41
Спасибо огромное! Наконец смогу рабочую прогу написать.
Alex
16.3.2012 16:40
Спасибо, помогло.