我在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;
}
您可以看到,我使用QString填充了所有16位范围内的字符,然后将它们转换为QByteArray(Utf8)并再次转换回QString。问题在于,值为0的字符和值大于55295的字符无法转换回QString。
如果我只使用1到< 55297的范围,则此测试通过。