QString, QByteArray, QDataStream, QStringLiteral 用法验证
// 要么使用"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; // 不能恢复,是乱码