这个数据库我用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
不知道对你有没有帮助。