Как получить правильный QString из "\ u0000"? - PullRequest
1 голос
/ 23 октября 2019

Иногда я получаю QString со значением «\ u0000» и хочу проверить, равна ли полученная строка «\ u0000». Но когда я пытаюсь:

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

, я получаю вывод: "\u0001" "\u0001"

Так что в результате я не могу сравнить строки. Я вижу, что изначально эта строка была создана с использованием snprintf из байта для получения char *, а затем создала std :: string и QString из std :: string, но на самом деле я пока не могу воспроизвести ее. Но я чувствую, что это обходной путь, но не простой способ сделать это.

Как создать QString со значением \u0000 с использованием API QString и почему QString("\u0000") приводит к значению "\ u0001"?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Я понял, как создать такую ​​строку.

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

или из std :: string:

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

Но я до сих пор не знаю, почему QString("\u0000") приводит к результатамв "\ u0001"

0 голосов
/ 24 октября 2019

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
...