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

时间:2011-10-05 20:36:17

标签: qt unicode

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

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

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

我收到了这个输出:

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

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

1 个答案:

答案 0 :(得分:13)

  

2017更新:2011年的答案适用于Qt 4.在Qt 5中,文本编解码器被删除,所有源都应该是UTF-8。见"Source code must be UTF-8 and QString wants it"

当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;
}

看看是否能解决你的问题。