Qt QString 到 QByteArray 并返回

Qt QString to QByteArray and back

我在从 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 到 < 55297 的范围内,则此测试通过。

从 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]);
}

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

std::string str = "hello world";

QString qstring = QString::fromStdString(str);

QByteArray buffer;

如果您查找“QByteArray::append”的文档,需要 QString 和 returns QByteArray

buffer = buffer.append(str);