qDebug () не поддерживает строки Unicode в Windows

У меня есть строка редактирования, которая содержит имя файла с Unicode-символами, и оно отображается правильно в графическом интерфейсе, но когда я печатаю его с qDebug(), он показывает символы Unicode в виде вопросительных знаков.

Например, для "C:/Test/абв" этот код покажет только "C:/Test/???",

Эта строка:

qDebug() << ui->lineEditFileName->text();

Показал бы:

введите описание изображения здесь

Эта проблема возникает только в Windows (как XP, так и в 7), в Linux она работает нормально. Версия Qt — 4.8.0.

3

Решение

Похоже, что текст Unicode «теряется в переводе», потому что Qt Creator использует QString::fromLocal8Bit() при чтении отладочного вывода из процесса.

Я нашел ответ от эта тема:

Я не знаю, что использует qDebug для помещения строк в консоль
окна (я предполагаю, QString :: toLocal8Bit). Я знаю, что Qt Creator использует
QString :: fromLocal8Bit (…) для чтения текста из процесса. Тот
отлично работает везде … но, к сожалению, есть одна ОС там
который по-прежнему настаивает на использовании кодовых страниц, которые полностью ломают любые
попытаться отобразить более одного вида сценария в типе.

3

Другие решения

Также проверьте эту настройку «Регион и язык» -> «Программы не-Unicode» на панели управления. Это помогло мне исправить неправильные символы в консоли отладки.

экран

2

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» кодеком по умолчанию для всех строк в вашей программе.

-1
По вопросам рекламы [email protected]