在实例化QApplication之后qDebug()时,我失去了"unicodeness"

Mar*_*rio 12 unicode qt

在实例化QApplication对象后,我正在失去打印unicode字符的能力.

从以下代码中包含所有需要的库:

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

我得到这个输出:

aeiou áéíóú
aeiou áéíóú
Run Code Online (Sandbox Code Playgroud)

我该如何修复这种奇怪的行为?我需要能够打印unicode字符串(以UTF-8格式).

Hos*_*ork 13

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;
}
Run Code Online (Sandbox Code Playgroud)

看看是否能解决您的问题.