Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 37

Знаменитые крякозябры qt

09.06.2017, 11:19. Показов 8451. Ответов 46

Студворк — интернет-сервис помощи студентам
В общем, стандартная проблема для qt: не выводит русские буквы в консоль. Пробовал несколько решений как с этого, так и с других форумов, но пока что ничего не помогло. Уважаемые форумчане, если кто сталкивался с такой проблемой и успешно ее решил, поделитесь, пожалуйста! Буду очень благодарен.

p.s. Нашел такое вот http://blog.mgsxx.com/?p=2979 простое решение, но не помогло, несмотря на перезапуск qmake. Автор утверждает, что у него все стабильно работает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2017, 11:19
Ответы с готовыми решениями:

Крякозябры
Доброго! После камиляции текстовый файл имеет такой вид: {writeln('‚ўҐбвЁ Є?«мЄ?бвм Ї®ўҐае?ў=> k'); readln(k); writeln('ўўҐбвЁ...

Крякозябры indy
Подскажите плз, как вылечить крякозябры? Сохраняю исходник сайта в мемо, с помощью инди, а сохраняется какая то херь. Вот пример ...

Крякозябры indy
Подскажите плз, как вылечить крякозябры? Сохраняю исходник сайта в мемо, с помощью инди, а сохраняется какая то херь. Вот пример ...

46
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
10.06.2017, 23:28
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TRam_ Посмотреть сообщение
то есть?
Файл в какой кодировке должен быть?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
10.06.2017, 23:34
После добавления тега в *.pro - файл обязательно произвести "Сборка-> Пересобрать проект".

Добавлено через 55 секунд
Цитата Сообщение от nd2 Посмотреть сообщение
Файл в какой кодировке должен быть?
-->
Цитата Сообщение от TRam_ Посмотреть сообщение
Потому что QtCreator по умолчанию создаёт в UTF-8.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
10.06.2017, 23:37
Цитата Сообщение от TRam_ Посмотреть сообщение
ну это смотря в какой кодировке cpp-файл создан... Потому что QtCreator по умолчанию создаёт в UTF-8.
Раз по умолчанию...
Цитата Сообщение от TRam_ Посмотреть сообщение
то есть?
То есть, у меня это так выглядит (файл в UTF-8), т.е.:
Цитата Сообщение от nd2 Посмотреть сообщение
Так вообще вывод не работает (у меня, с компилятором студии).
Миниатюры
Знаменитые крякозябры qt  
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
10.06.2017, 23:56
Цитата Сообщение от TRam_ Посмотреть сообщение
ну это смотря в какой кодировке cpp-файл создан... Потому что QtCreator по умолчанию создаёт в UTF-8. Это только если создавать проект по Visual Studio, тогда да, при открытии в криэйторе останется именно CP1251.
Как страшно жить!
Как страшно жить ... в виндаус
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 00:37
Цитата Сообщение от TRam_ Посмотреть сообщение
Потому что QtCreator по умолчанию создаёт в UTF-8.
В настройках устанавливается: кодировка файлов по умолчанию.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 01:37
Цитата Сообщение от nd2 Посмотреть сообщение
То есть, у меня это так выглядит, т.е.:
Да, странно. Для компилятора 2010 студии проверил, на нём строки компилируются из UTF-8 в CP1251 автоматически...
Миниатюры
Знаменитые крякозябры qt  
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 01:38
Но чтобы "вывод совсем не работал" - такого нету...
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 01:52
Цитата Сообщение от TRam_ Посмотреть сообщение
Для компилятора 2010 студии проверил, на нём строки компилируются из UTF-8 в CP1251 автоматически...
Хочешь сказать, что такой способ:
C++
1
SetConsoleOutputCP(CP_UTF8);
и в студии должен работать?
Миниатюры
Знаменитые крякозябры qt  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 02:40
Цитата Сообщение от TRam_ Посмотреть сообщение
Но чтобы "вывод совсем не работал" - такого нету...
Я тебе показал, как это выглядит.

Добавлено через 3 минуты
Цитата Сообщение от TRam_ Посмотреть сообщение
Для компилятора 2010 студии проверил, на нём строки компилируются из UTF-8 в CP1251 автоматически...
При этом, в консоли, какая CP должна быть выставлена, чтобы кириллица выводилась? По логике, раз переводит в CP1251, то CP1251?

Добавлено через 25 минут
В студии та же история (что неудивительно). Вне зависимости от кодировки файла (Windows-1251 или UTF-8), при таком методе:
C++
1
SetConsoleOutputCP(CP_UTF8);
вывода просто нет.
При таком (файл в Windows-1251 или UTF-8):
C++
1
SetConsoleOutputCP(1251);
нормально выводит кириллицу (шрифт, естественно, Lucida Console).
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 03:18
nd2, не, в визуалстудиевском компиляторе всё более весело, и одновременно просто. Если в начале файла с кодом компилятор находит Byte Order Mark (https://ru.wikipedia.org/wiki/... сти_байтов), то он считает этот файл UTF'ом. Если BOM'а нет, то считает что это CP1251.

А QtCreator по-умолчанию генерирует новые файлы проекта без Byte Order Mark . В результате проекты, отличающиеся на него (рис. 1) при компиляции одним и тем же компилятором работают по-разному (рис. 2).

Отсюда вывод. При работе с QtCreator под компилятором Visual Studio обязательно переключать вот этот флаг в настройках криэтойра (рис. 3). Иначе же будет как на рис. 2 слева.
Миниатюры
Знаменитые крякозябры qt   Знаменитые крякозябры qt   Знаменитые крякозябры qt  

1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 03:34
И после добавления такого флага поредактировать файлы исходного кода, т.к. при простом открытии на просмотр BOM добавлен не будет. Нужно чтоб были изменения.

Добавлено через 7 минут
Либо как в Знаменитые крякозябры qt сделать, выставить её же (IBM866) по умолчанию, и убрать из кода SetConsoleOutputCP вместе с "#include <Windows.h>"
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 03:48
Цитата Сообщение от TRam_ Посмотреть сообщение
При работе с QtCreator под компилятором Visual Studio обязательно переключать вот этот флаг в настройках криэтойра (рис. 3).
Переключил, получил файл с BOM (проверил в hex-редакторе), раньше действительно был без BOM. Вывода нет.

Добавлено через 3 минуты
Цитата Сообщение от TRam_ Посмотреть сообщение
Либо как в Знаменитые крякозябры qt сделать, выставить её же (IBM866) по умолчанию
С этим всё понятно. Непонятно почему с SetConsoleOutputCP(CP_UTF8); у тебя работает, а у меня нет.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 03:50
nd2, значит разные версии компиляторов msvc по-разному на него реагируют . У меня под VC2010 без BOM получается как в левом окне, а у тебя с более "свежим" получается всё наоборот.

Добавлено через 43 секунды
Цитата Сообщение от nd2 Посмотреть сообщение
Непонятно почему с SetConsoleOutputCP(CP_UTF8); у тебя работает, а у меня нет.
потому что это работало так только на MinGW без опций компилятору.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 03:55
У тебя в студии работает с SetConsoleOutputCP(CP_UTF8);?

Добавлено через 1 минуту
Цитата Сообщение от TRam_ Посмотреть сообщение
значит разные версии компиляторов msvc по-разному на него реагируют
У тебя компилятор разве не 10-й студии?

Добавлено через 2 минуты
...
Цитата Сообщение от TRam_ Посмотреть сообщение
Для компилятора 2010 студии проверил, на нём строки компилируются из UTF-8 в CP1251 автоматически...
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 03:57
Цитата Сообщение от nd2 Посмотреть сообщение
У тебя в студии работает с SetConsoleOutputCP(CP_UTF8);
В студии - нет, не работает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 04:00
Цитата Сообщение от TRam_ Посмотреть сообщение
В студии - нет, не работает.
А в qtcreator, со студийным компилятором, работает?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 04:01
Цитата Сообщение от nd2 Посмотреть сообщение
А в qtcreator, со студийным компилятором, работает?
Тоже не работает.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 04:04
Цитата Сообщение от TRam_ Посмотреть сообщение
Тоже не работает.
Это называется: приплыли...
В общем, knyazoleg, читай 18 пост.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.06.2017, 04:07
Для сравнения, с кодом в файле UTF-8 без BOM'а
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <Windows.h>
 
int main()
{
    SetConsoleOutputCP(CP_UTF8/*1251*/);
    std::cout << "Кириллица в консоли \n";
    system("pause");
    return 0;
}
Слева - MinGW, справа MSVC
Миниатюры
Знаменитые крякозябры qt  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
11.06.2017, 04:57
Я в 26 посту на код на скрине не посмотрел, поэтому не понял текста, подумал, что код с SetConsoleOutputCP(CP_UTF8); работает.

Добавлено через 35 минут
Цитата Сообщение от TRam_ Посмотреть сообщение
с кодом в файле UTF-8 без BOM'а
Цитата Сообщение от TRam_ Посмотреть сообщение
справа MSVC
У тебя что-то там выводится, у меня просто пропуск вывода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2017, 04:57

Крякозябры на сайте в IE
Значит так, поставил через notepad++ кодировку utf-8(без BOM). Во всех браузерах, кроме IE и в некоторых мозиллах выходят крякозябры....

WebView. Крякозябры
WebView myWebView = (WebView) findViewById(R.id.webView); String summary = &quot;&lt;html&gt;&lt;body&gt;&quot; + text + &quot;&lt;/body&gt;&lt;/html&gt;&quot;; ...

Крякозябры в имени пользователя
Здравствуйте. я в программировании полный ноль. Друг написал для меня программу по очистке некоторых папок. Бьёмся уже которых день. На...

Кодировка отладчика: крякозябры
Решил освоить Qt (установил 5.4), и вместо того, чтобы листать книжку Шлея я весь день дерусь с этим треклятым Qt Creator 3.3. Задал...

Выводятся крякозябры в консоли
Подскажите, добрые люди, не могу сам понять в чем проблема? class String { private: char* _string;


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Альцгеймер и колоссальный объем вычислений
Programma_Boinc 08.08.2026
Альцгеймер и колоссальный объем вычислений Сейчас по направлению болезни Альцгеймера идет колоссальный объем вычислений. Это один из главных приоритетов проекта. Такой массовый наплыв задач. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru