Я теряю «уникальность» при использовании qDebug () после создания QApplication - PullRequest
12 голосов
/ 06 октября 2011

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

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

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

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

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

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

1 Ответ

13 голосов
/ 06 октября 2011

ОБНОВЛЕНИЕ 2017 ГОДА : Этот ответ с 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;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...