如何从“\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"
有时我收到值为“\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"