问题形貌:在老项目数据库中,中文显示乱码,编码格式未知,一度猜疑举行了加密。
问题定位:最终,经过大佬的尝试,发现是编码格式的问题。老项目中是将GBK编码的中文字符按照ISO-8859-1编码存入,导致乱码。
解决方法(Qt):
[code]void test(){ // 读取数据库 QSqlDatabase db; QSqlQuery query(db); QString str = QString("select * from db;"); query.exec(str); while (query.next()) { // 读取乱码 QSqlRecord record = query.record(); QByteArray data = record.value("data").toByteArray(); // 确定两种编码格式 QTextCodec *codec_iso = QTextCodec::codecForName("ISO-8859-1"); QTextCodec *codec_gbk = QTextCodec::codecForName("GBK"); // 将Qt读取的QByteArray转换成ISO-8859-1编码 QByteArray b1 = codec_iso->fromUnicode(b); // 再用GBK编码转换成unicode QString s = codec_gbk->toUnicode(b1); // 打印输出是否正确 qDebug() |