Qt转换unicode实体

问题描述 投票:7回答:3

在QT 5.4和C ++中,我尝试解码具有unicode实体的字符串。

我有这个QString:

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

我想将此字符串转换为:fileÖÇŞİĞÜİçöşiğüı.txt

我尝试了QStringtoUtf8fromUtf8方法。还尝试逐个字符地解码它。

有没有办法使用Qt转换它?

c++ windows qt visual-studio-2012 unicode
3个回答
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;
}

如上面的注释所述,您需要打印到支持这些字符的控制台才能使用。


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,所以看起来你的问题只适用于某些操作系统。


0
投票
#include <QTextDocument>

QTextDocument doc;

QString string = "file\u00d6\u00c7\u015e\u0130\u011e\u00dc\u0130\u00e7\u00f6\u015fi\u011f\u00fc\u0131.txt";
doc.setHtml(string);                   // to convert entities to text
QString result = doc.toPlainText();    // result = "fileÖÇŞİĞÜİçöşiğüı.txt"

如果您有CONSOLE应用程序,则无用,QTextDocument需要GUI模块。

© www.soinside.com 2019 - 2024. All rights reserved.