• 10106阅读
  • 3回复

[提问]关于UBUNTU下QT4读取Sqlite数据库中文内容乱码的问题 [复制链接]

上一主题 下一主题
离线caszhao
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-12
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
网上关于QT4中文乱的解决方法很多,但我这个问题有点特殊,我尚且未找到解决方法。望前辈们帮忙解决一下。
若中文字符串不是从数据库读取,则可以正常显示。怀疑是否是数据库编码的问题,但我不知道从哪里设置数据库的编码方式。谢谢



int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
QTextEdit display;
display.resize(400, 160);
display.show(); //下面进行数据库的设置

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //使用sqlite数据库驱动
db.setDatabaseName("bdc.s3db"); //我们之前建立的数据库
//db.set
bool ok = db.open(); //尝试连接数据库
if (ok)
{ //这里用text已经成功连上数据库
QSqlQuery query; //新建一个查询的实例
display.append("connect....");
if (query.exec("select * from zb_tb")) //尝试列出表的所有记录
{ //本次查询成功
QString name, age;

display.append("===========================================");
while(query.next())
{ //定位结果到下一条记录
name = query.value(0).toString();
age = query.value(1).toString();
QString result = name+ " " + age;
// + " " + age;

//display.append(QObject::tr(age.toAscii().data()));
display.append(result);
}
display.append("===========================================");
}
else
{ //如果查询失败,用下面的方法得到具体数据库返回的原因
QSqlError error = query.lastError();
display.append("From mysql database: " + error.databaseText());
}
}
else
{ //打开数据库失败,显示数据库返回的失败描述
display.append("cannot open database.");
display.append("Reason: " + db.lastError().databaseText());
}
QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
return app.exec();
}




*****************************************************************************************
注意到 name = query.value(0).toString();
age = query.value(1).toString();
我怀疑问题出在这里。
因为我用
name = "面的方法得到";
age = "法得";
代替上面的两行。结果是可以正常显示中文的。
离线caszhao
只看该作者 1楼 发表于: 2009-10-12
还是没解决。。。
离线gflytu

只看该作者 2楼 发表于: 2010-09-03
我也存在同样的问题,利用QSqlQuery读取的字段乱码,请大家指教,十分感谢。
离线hcyake
只看该作者 3楼 发表于: 2012-05-18
数据库中的中文字段不要以二进制存储,也就是不区分大小写,试试看!
快速回复
限100 字节
 
上一个 下一个