【问题标题】:How to get correct QString from "\u0000"?如何从“\u0000”获取正确的 QString?
【发布时间】:2020-02-19 10:36:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • \u0000 是空字符。您希望打印什么?如果要检查字符串是否为空字符串,QString::isNull() 可能会有所帮助。
  • @vahancho 对,那是空的。但我实际上收到了“\u0000\u0000\u0000\u0000”字符串,所以我认为我不能只检查它是否为NULL。虽然我会尝试。
  • 接收到的QString "\u0000\u0000\u0000\u0000" 为isNull()返回false

标签: qt unicode qstring


【解决方案1】:

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

【讨论】:

  • 当我收到这样的字符串时,可以创建它。如果可以创建它,我必须可以创建相同的,以便能够比较它们。
  • 请将带有“\u0000\u0000\u0000\u0000”内容的QString的.length()的返回值发给我。
  • 带有“\u0000\u0000\u0000\u0000”的QString长度为4
  • @rightaway717 是你从调试控制台得到的还是你的假设?
  • 这是控制台中length()方法的输出。谢谢,无论如何,我想出了如何创建这个字符串并将发布答案
【解决方案2】:

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

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

或来自 std::string:

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

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

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多