我遇到从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到<1的范围内。 55297这个测试通过了。
答案 0 :(得分:3)
从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]);
}
答案 1 :(得分:3)
我有一项任务要将std::string
转换为QString
,将QString
转换为QByteArray
。以下是我为完成此任务所做的工作。
std::string str = "hello world";
QString qstring = QString::fromStdString(str);
QByteArray buffer;
如果您查找“QByteArray::append
”的文档,则需要QString
并返回QByteArray
。
buffer = buffer.append(str);