2015-04-07 24 views
7

在QT 5.4和C++中,我嘗試解碼具有unicode實體的字符串。Qt convert unicode entities

我有這樣的QString:

QString string = "file\u00d6\u00c7\u015e\u0130\u011e\u00dc\u0130\u00e7\u00f6\u015fi\u011f\u00fc\u0131.txt"; 

我想這個字符串轉換成這樣:fileÖÇŞİĞÜİçöşiğüı.txt

我試圖QStringtoUtf8fromUtf8方法。還試圖逐字符解碼。

有沒有辦法通過使用Qt轉換它?

+1

可能您的控制檯未配置爲打印Unicode。如果您在Windows提示符下執行,請嘗試這個http://stackoverflow.com/questions/2492077/output-unicode-strings-in-windows-console-app – KuramaYoko

+0

謝謝。是的Windows控制檯也有unicode問題,但我需要在我的cpp代碼解碼。 – trante

+0

您的字符串文字包含Unicode轉義符,可能不適合8位的字符。在al Qt平臺上,char是8位。你可能需要一個寬泛的文字:'L'file \ u00d6 \ u00c7 \ u015e \ u0130 ...「' – MSalters

回答

2

我剛剛測試此代碼:

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QString s = "file\u00d6\u00c7\u015e\u0130\u011e\u00dc\u0130\u00e7\u00f6\u015fi\u011f\u00fc\u0131.txt"; 
    qDebug() << s.length(); //Outputs: 22 
    qDebug() << s;   //Outputs: fileÖÇŞİĞÜİçöşiğüı.txt 
    return a.exec(); 
} 

這是在Ubuntu的Qt 5.4,所以它看起來像你的問題是,只有一些操作系統。

7

Qt提供了一個名爲QStringLiteral的宏來正確處理字符串文字。

這裏是一個完整的工作示例:

#include <QString> 
#include <QDebug> 

int main(void) { 
    QString string = QStringLiteral("file\u00d6\u00c7\u015e\u0130\u011e\u00dc\u0130\u00e7\u00f6\u015fi\u011f\u00fc\u0131.txt"); 
    qDebug() << string; 

    return 0; 
} 

如上面提到的意見,你需要打印到支持這些字符這個工作的控制檯。

+0

這適用於文本參數。當我傳遞一個QString作爲參數時,這不起作用。 '''QString string1 =「file \ u00d6 \ u00c7 \ u015e \ u0130 \ u00d6 \ u00c7 \ u0015 \ u00e7 \ u00f6 \ u015f \ u011f \ u00fc \ u0131.txt」;'''''QString string2 = QStringLiteral(string );''' – trante

+1

顧名思義,它僅*用於字符串文字。所以在你的例子中,你應該像這樣包裝你的:'QString string1 = QStringLiteral(「file \ u00d6 \ u00c7 \ u015e \ u0130 \ u011e \ u00dc \ u0130 \ u00e7 \ u00f6 \ u015fi \ u011f \ u00fc \ u 0131.txt 「);' – MrEricSir