Qt QString到QByteArray并返回

时间:2016-07-23 12:09:29

标签: c++ qt qstring qbytearray

我遇到从QString到QByteArray再转换回QString的问题:

int main() {

    QString s;

    for(int i = 0; i < 65536; i++) {
        s.append(QChar(i));
    }

    QByteArray ba = s.toUtf8();

    QString s1 = QString::fromUtf8(ba);

    if(areSame(s, s1)) {
        qDebug() << "OK";
    } else {
       qDebug() << "FAIL";
       outputErrors(s, s1);
    }

    return 0;
}

正如您所看到的,我使用16位范围内的所有字符填充QString。然后将它们转换为QByteArray(Utf8)并返回QString。问题是值为0的字符和值大于55295的字符无法转换回QString。

如果我保持在1到<1的范围内。 55297这个测试通过了。

2 个答案:

答案 0 :(得分:3)

从55296(0xD800)到57343(0xdfff)的字符为surrogate characters。 您可以将其视为后面角色的转义字符。它们本身毫无意义。

您可以通过运行来检查它:

// QChar(0) was omitted so s and s1 start with QChar(1)
for (int i = 1 ; i < 65536 ; i++)
{
    qDebug() << i << QChar(i) << s[i-1]  << s1[i-1] << (s[i-1] == s1[i-1]);
}

答案 1 :(得分:3)

我有一项任务要将std::string转换为QString,将QString转换为QByteArray。以下是我为完成此任务所做的工作。

std::string str = "hello world";

QString qstring = QString::fromStdString(str);

QByteArray buffer;

如果您查找“QByteArray::append”的文档,则需要QString并返回QByteArray

buffer = buffer.append(str);