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

时间:2019-10-23 08:19:25

标签: qt unicode qstring

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

QString始终为空终止。 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

答案 1 :(得分:0)

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

QString str(1, QChar('\0'));

或从std :: string:

QString::fromStdString(std::string("\0", 1));

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