2011-10-05 45 views
12

當QApplication對象實例化後,我失去了打印unicode字符的能力後,qDebug()ing失去「unicodeness」

從下面的代碼,並已經包括了所有需要的庫:

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

我得到這樣的輸出:

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

如何解決這個奇怪的行爲呢?我需要能夠打印Unicode字符串(以UTF-8格式)。

+0

@HostileFork是的,他們都是UTF-8,我在網頁開發時學會了這樣做,服務UTF-8編碼的文檔並且不知道它在拉丁文檔中是不是很有趣。大聲笑 – 2011-10-06 16:12:45

回答

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

然後看看是否解決了你的問題。

+0

它修復了問題,完美。 – 2011-10-06 01:11:40