如何从“\u0000”获取正确的 QString?

How to get correct QString from "\u0000"?

有时我收到值为“\u0000”的QString,我想检查收到的字符串是否等于“\u0000”。 但是当我尝试时:

qDebug() << QString("\u0000") << QString::fromUtf8("\u0000");

我得到输出:"\u0001" "\u0001"

因此我无法比较字符串。我看到最初这个字符串是使用 snprintf 从字节创建的以获取 char*,然后从 std::string 创建了 std::string 和 QString,但到目前为止我实际上无法重现它。但我觉得这是一种解决方法,但不是简单的方法。

如何使用 QString API 创建值为 \u0000 的 QString 以及为什么 QString("\u0000") 会产生值“\u0001”?

QString 始终以 null 结尾。 null QString 意味着它的内部数组中没有数据,但是 empty QString 在其内部数据数组中有一个空字符。因此,如果您对原始数组的发送方有任何控制,最好通过 QByteArray 而不是 QString 发送它。您将无法计算 QString 中的多个空字符。

来自QString参考文档:

QString().isNull();               // returns true
QString().isEmpty();              // returns true

QString("").isNull();             // returns false
QString("").isEmpty();            // returns true

QString("abc").isNull();          // returns false
QString("abc").isEmpty();         // returns false

我想出了如何创建这样的字符串。

QString str(1, QChar('[=10=]'));

或来自std::string:

QString::fromStdString(std::string("[=11=]", 1));

但我仍然不知道为什么 QString("\u0000") 会导致 "\u0001"