заголовочник и там сгенерировал qmap в виде
const static QMap<uint8_t, QString> mMapErrors = {...}
Где в QString находится кириллица. Так же в самом коде есть кириллица.
Решил испытать на виндовсе msvc. Приложение консольное, но весь вывод идет не в терминал а в вывод QtCreator
Текст который находится в коде выводится нормально. Текст который в QMap выводился в виде "???? ??? ???".
Добавил в pro файл CODECFORSRC=UTF-8. Теперь при запуске программы весь текст виден нормально.
Теперь решил исходники перенести в подпроект в pri файл. При запуске теперь весь текст выводится "???? ????", что в коде текст, что в qmap.
С u8"..." текст получается "Карта".
Какой нужен флаг компилятору msvc, чтобы он понимал что весь код в utf-8 ?
По идее нужны всего лишь два дефайна UNICODE и _UNICODE (но qmake их выставляет самостоятельно)
Добавил в pri файл CONFIG+=utf8_source Вылетело 90тыс предупреждений. Я использую одну стороннюю библиотеку (dll + заголовочник). У этой библиотеки нету кирилицы в коде, а в заголовочнике множество прототипов функций и очень много комментария в коде. Все 90тыс предупреждений относились к коментариям функций. Выяснил что заголовочник в кодировке 1251. Походу это ломает компилятор. Зато мой проект после компиляции стал выводить на русском как надо. Наверное из-за этой библиотеки msvc компилирует все в кодировке 1251. Подумаю что с этим сделать
Посмотрите внимательно дефайны в заголовках этой библиотеки, а 1251 действительно враг тут вам
Поменял кодировку заголовочника библиотеки. Все равно остались проблемы с кодировкой на msvc с pri файлом. Добавил в pri CONFIG+=utf8_source, предупреждений теперь нет, т.к. все файлы utf8. При запуске приложения появился нормальный вывод. Этот конфиг работает и на линуксе, что не мешает кроссплатформенности. Вроде бы писали что для мингв тоже работает. В доке написано: Specifies that the project's source files use the UTF-8 encoding. By default, the compiler default is used.
а какой у вас msvc?
qt 5.15.2, msvc 2015 64 bit
2015... тогда всё ясно
c 2017 то же самое
Обсуждают сегодня