// 要么使用"QStringLiteral",要么使用"#pragma execution_character_set("utf-8")",但不能同时使用。
// 长度是6,宽字符。
QString s(QStringLiteral("ABCD中文"));
// b1长度:10,能恢复
QByteArray b1 = s.toUtf8();
QString s1 = b1;
// b2长度:6,不能恢复
QByteArray b2 = s.toLatin1();
QString s2 = b2;
// b3与b1相同,能恢复
QByteArray b3 = s.toStdString().c_str();
QString s3 = b3;
// b4长度:16,前4个字节是内容长度,即12,后面12字节是内容
QByteArray b4;
QDataStream out4(&b4, QIODevice::WriteOnly);
out4 << s;
QString s4_0 = b4; // 格式不对,赋值后s4_0为空
QString s4_1;
QDataStream in4(&b4, QIODevice::ReadOnly);
in4 >> s4_1; // 能恢复
// b5长度:14,前4个字节是内容长度,即10,后面10字节是内容
QByteArray b5;
QDataStream out5(&b5, QIODevice::WriteOnly);
out5 << s.toUtf8();
QString s5_0 = b5; // 格式不对,赋值后s4_0为空
QString s5_1;
QDataStream in5(&b5, QIODevice::ReadOnly);
in5 >> s5_1; // 不能恢复,是乱码