从sqlite的db中,将某个字段(中文编码)内容提取出来解决办法

从sqlite的db中,将某个字段(中文编码)内容提取出来
现在有一个第三方的sqlite的db文件,想要提取test表中“chn”中字段的内容,内容是中文的。我试了很多编码,但提取出来的是乱码。我用的是QT5.2,64位。

下面是我的代码

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QTextCodec>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForLocale(codec);

    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName("d:/test.db");
    if(!database.open())
    {
        qFatal("failed to connect.") ;
        return 1;
    }

    QSqlQuery sql_query;
    QString select_sql = "select line, chn from test";
    sql_query.prepare(select_sql);
    if(!sql_query.exec())
    {
        qFatal("failed to query.") ;
        return 1;
    }
    while(sql_query.next())
    {
        int linecnt = sql_query.value(0).toInt();
        QByteArray chntxtbyte = sql_query.value(1).toByteArray();
        QTextCodec *codec1 = QTextCodec::codecForName("GB2312");
        QTextCodec *codec3 = QTextCodec::codecForName("UTF-8");
        QString chntxtstr1 = codec1->toUnicode(chntxtbyte);
        QString chntxtstr3 = codec3->toUnicode(chntxtbyte);
        qDebug()<<chntxtbyte<<linecnt<<chntxtstr1<<chntxtstr3<<"****************"<<endl;

    }
    database.close();

    return a.exec();
}


第三方的db没有办法上传上来,如果有需要我可以发邮件给您。在调试过程中,chntxtbyte的内容如下

chntxtbyte "...................." QByteArray
[0] -17 / 239 char
[1] -65 / 191 char
[2] -67 / 189 char
[3] -17 / 239 char
[4] -65 / 191 char
[5] -67 / 189 char
[6] -17 / 239 char
[7] -65 / 191 char
[8] -67 / 189 char
[9] -25 / 231 char
[10] -78 / 178 char
[11] -69 / 187 char
[12] -16 / 240 char
[13] -106 / 150 char
[14] -86 / 170 char
[15] -75 / 181 char
[16] -17 / 239 char
[17] -65 / 191 char
[18] -67 / 189 char
[19] 10 '\n' char




------解决方案--------------------
QString str(chntxtbyte.data());
str.toUtf8().data() 或其它类似的方法。