Подтвердить что ты не робот

Я теряю "unicodeness", когда qDebug() после установки QApplication

Я теряю возможность печатать символы юникода сразу после запуска объекта QApplication.

Из следующего кода и включив все необходимые библиотеки:

int main(int argc, char** argv)
{   
    qDebug() << "aeiou áéíóú";
    QApplication app(argc, argv);
    qDebug() << "aeiou áéíóú";
    return 0;
}

Я получаю этот вывод:

aeiou áéíóú
aeiou áéíóú

Как исправить это странное поведение? Мне нужно иметь возможность печатать строки Unicode (входящие в UTF-8).

4b9b3361

Ответ 1

2017 UPDATE. Этот ответ от 2011 года относится к Qt 4. В Qt 5 текстовые кодеки были исключены, и ожидается, что все источники будут UTF-8. См. Исходный код должен быть UTF-8 и QString хочет его

Когда Qt интерпретирует char * в строке, он использует текстовый кодек. Это настроено глобально, и вы можете выбрать, что хотите для своего проекта:

https://doc.qt.io/qt-4.8/qtextcodec.html#setCodecForCStrings

Обратите внимание, что значение Qt по умолчанию - Latin-1, и оно может установить это значение по умолчанию в стеке вызова конструктора QApplication. Если вы используете глобальный UTF-8 в своем проекте, вы можете попробовать:

int main(int argc, char** argv)
{   
    qDebug() << "aeiou áéíóú";

    QApplication app(argc, argv);
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForCStrings(codec);

    qDebug() << "aeiou áéíóú";
    return 0;
}

И посмотрите, решит ли это вашу проблему.