Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: LisandreL от Май 02, 2011, 16:48



Название: QtCreator + GDB + кириллица = ?
Отправлено: LisandreL от Май 02, 2011, 16:48
Ставлю кодек, совпадающий с кодировкой исходного кода:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
или
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Далее делаю отладочный вывод:
Код:
qDebug("тест");

При обычном запуске всё в порядке:
(http://habreffect.ru/files/283/d1eb3d034/1.png)

Но если запускать в отладке, то вывод начинается не в той кодировке:
(http://habreffect.ru/files/6b3/587022fc9/2.png)

Ну и собственно вопрос - можно ли это исправить?


Название: Re: QtCreator + GDB + кириллица = ?
Отправлено: Vass от Май 02, 2011, 21:00
Винда? Насколько я помню у виндов до мих пор в консолях досовская кодировка.

P.S. Не латинница в исходниках (а уж тем более в дебаг выводе) - моветон.


Название: Re: QtCreator + GDB + кириллица = ?
Отправлено: LisandreL от Май 02, 2011, 22:19
Винда?
Риторическй вопрос? "C:\...", "cp1251" - какие ещё могут быть варианты?
Насколько я помню у виндов до мих пор в консолях досовская кодировка.
Да, CP866. Но интересует не она, а консоль приложения в самом Qt Creator'е.
P.S. Не латинница в исходниках (а уж тем более в дебаг выводе) - моветон.
Ситуация такая: cистема пишет лог в файл. Лог должен быть на русском.
Для отладки удобно, что бы теже самые сообщения выдавались ещё и в консоль.
Нечто вроде:
Цитировать
void log( const QString& msg )
{
    ... // вывод в файл
#ifdef QT_DEBUG
    qDebug( msg.toAscii().data() );
#endif
}
Никакими комбинациями QTextCodec::setCodecForCStrings, QTextCodec::setCodecForLocale, QString::toAscii(), QString::toLocal8Bit(), QString::toUtf8(), QString::utf16(), которые я успел проверить, GDB не удалось заставить выводить кириллицу. Без него всё выводится отлично.

P.S. Почтовый декодер подсказывает, что если без GDB всё нормально, то с ним кодировка перепутана следующим образом: CP1252 → CP1251. Но как это исправить (если возможно) я не понимаю.