当前位置: 代码迷 >> QT开发 >> Qt读取sqllite乱码,变换编码也没用
  详细解决方案

Qt读取sqllite乱码,变换编码也没用

热度:92   发布时间:2016-04-25 04:29:48.0
Qt读取sqllite乱码,转换编码也没用
这个数据库我用SQLiteSpy查看时,有些中文正常,但有些中文是乱码的。然后用Qt去读取的时候,怎么转换都不能把乱码变成正常。给我这个数据库的人说,是因为以前写入的时候有些是gbk字符,有些是utf-8,所以会这样。。可我试了网上的那些编码转换函数,都没有作用。希望大家帮帮忙。

我用的代码如下:
C/C++ code
#include <QtCore/QCoreApplication>#include <QTextCodec>#include <Qtsql/QSqlDatabase>#include <Qtsql/QSqlError>#include <Qtsql/QSqlQuery>int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    QSqlDatabase *SqliteDb;    SqliteDb = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE","SqliteDb"));    SqliteDb->setDatabaseName("files.db");    SqliteDb->open();    QString SqlText = "SELECT FileName,Title FROM files"  ;    qDebug(SqlText.toAscii());    QSqlQuery Query(*SqliteDb);    bool Result = Query.exec(SqlText);    if (!Result)    {        qCritical("SqliteDB Query Failed:%s",SqlText.toAscii().constData());    };    QString tmp, tmp2;    while(Query.next())    {        tmp = Query.value(0).toString();        tmp2 = Query.value(1).toString();        qDebug(tmp.toAscii().data());        qDebug(tmp2.toAscii().data());    }    return a.exec();}


使用的sqllite的数据库文件,在这里http://dl.dbank.com/c0ufxgyf8m


------解决方案--------------------
编码混合了?这个很难搞啊。你先全部转成QByteArray,然后再尝试用不同的编码解码一下
------解决方案--------------------
要不先都转换成\u0061的Unicode 
然后在转换回来 就OK了!
------解决方案--------------------
首先要知道数据库的编码方式

可以使用QTextcodec进行转换
------解决方案--------------------
楼主提供的数据库链接 无法下载。
你试一下 tmp = tr(Query.value(0).toByteArray ()); 可以吗
------解决方案--------------------
我之前用mysql的时候也遇到这个问题,我的解决办法是这个:http://blog.csdn.net/stormwy/article/details/7853464
不知道对你有没有帮助。