Qt QString 到 QByteArray 并返回
Qt QString to QByteArray and back
我在从 QString 到 QByteArray 再回到 QString 的转换中遇到问题:
int main() {
QString s;
for(int i = 0; i < 65536; i++) {
s.append(QChar(i));
}
QByteArray ba = s.toUtf8();
QString s1 = QString::fromUtf8(ba);
if(areSame(s, s1)) {
qDebug() << "OK";
} else {
qDebug() << "FAIL";
outputErrors(s, s1);
}
return 0;
}
如您所见,我用 16 位范围内的所有字符填充了 QString。然后将它们转换为 QByteArray (Utf8) 并返回到 QString。问题是值为0的字符和大于55295的字符无法转换回QString。
如果我保持在 1 到 < 55297 的范围内,则此测试通过。
从 55296 (0xD800) 到 57343 (0xdfff) 的字符是 surrogate characters。
您可以将其视为其后字符的转义字符。它们本身没有任何意义。
您可以通过运行查看:
// QChar(0) was omitted so s and s1 start with QChar(1)
for (int i = 1 ; i < 65536 ; i++)
{
qDebug() << i << QChar(i) << s[i-1] << s1[i-1] << (s[i-1] == s1[i-1]);
}
我的任务是将 std::string
转换为 QString
,并将 QString
转换为 QByteArray
。以下是我为完成此任务所做的工作。
std::string str = "hello world";
QString qstring = QString::fromStdString(str);
QByteArray buffer;
如果您查找“QByteArray::append
”的文档,需要 QString
和 returns QByteArray
。
buffer = buffer.append(str);
我在从 QString 到 QByteArray 再回到 QString 的转换中遇到问题:
int main() {
QString s;
for(int i = 0; i < 65536; i++) {
s.append(QChar(i));
}
QByteArray ba = s.toUtf8();
QString s1 = QString::fromUtf8(ba);
if(areSame(s, s1)) {
qDebug() << "OK";
} else {
qDebug() << "FAIL";
outputErrors(s, s1);
}
return 0;
}
如您所见,我用 16 位范围内的所有字符填充了 QString。然后将它们转换为 QByteArray (Utf8) 并返回到 QString。问题是值为0的字符和大于55295的字符无法转换回QString。
如果我保持在 1 到 < 55297 的范围内,则此测试通过。
从 55296 (0xD800) 到 57343 (0xdfff) 的字符是 surrogate characters。 您可以将其视为其后字符的转义字符。它们本身没有任何意义。
您可以通过运行查看:
// QChar(0) was omitted so s and s1 start with QChar(1)
for (int i = 1 ; i < 65536 ; i++)
{
qDebug() << i << QChar(i) << s[i-1] << s1[i-1] << (s[i-1] == s1[i-1]);
}
我的任务是将 std::string
转换为 QString
,并将 QString
转换为 QByteArray
。以下是我为完成此任务所做的工作。
std::string str = "hello world";
QString qstring = QString::fromStdString(str);
QByteArray buffer;
如果您查找“QByteArray::append
”的文档,需要 QString
和 returns QByteArray
。
buffer = buffer.append(str);