У меня есть строка редактирования, которая содержит имя файла с Unicode-символами, и оно отображается правильно в графическом интерфейсе, но когда я печатаю его с qDebug()
, он показывает символы Unicode в виде вопросительных знаков.
Например, для "C:/Test/абв"
этот код покажет только "C:/Test/???"
,
Эта строка:
qDebug() << ui->lineEditFileName->text();
Показал бы:
Эта проблема возникает только в Windows (как XP, так и в 7), в Linux она работает нормально. Версия Qt — 4.8.0.
Похоже, что текст Unicode «теряется в переводе», потому что Qt Creator использует QString::fromLocal8Bit()
при чтении отладочного вывода из процесса.
Я нашел ответ от эта тема:
Я не знаю, что использует qDebug для помещения строк в консоль
окна (я предполагаю, QString :: toLocal8Bit). Я знаю, что Qt Creator использует
QString :: fromLocal8Bit (…) для чтения текста из процесса. Тот
отлично работает везде … но, к сожалению, есть одна ОС там
который по-прежнему настаивает на использовании кодовых страниц, которые полностью ломают любые
попытаться отобразить более одного вида сценария в типе.
Также проверьте эту настройку «Регион и язык» -> «Программы не-Unicode» на панели управления. Это помогло мне исправить неправильные символы в консоли отладки.
Linux использует Unicode для своего терминала, Windows — нет. Вы можете узнать, какая кодовая страница используется, набрав chcp
в cmd
, Что вам нужно, это преобразовать вашу строку, используя эту кодовую страницу перед выводом:
QTextCodec *codec = QTextCodec::codecForName("CP866");
qDebug() << codec->fromUnicode(ui->lineEditFileName->text());
Или установите его для всех c-строк:
int main()
{
...
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP866"));
...
}
Второй фрагмент кода сделает «CP866» кодеком по умолчанию для всех строк в вашей программе.