• 6946阅读
  • 4回复

[提问]数据库显示汉字是乱码怎么办 [复制链接]

上一主题 下一主题
离线marnie
 
只看楼主 倒序阅读 楼主  发表于: 2011-02-15
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
#ifndef DATA_H
#define DATA_H
#include <QSqlQuery>


static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("datebase.db");  //不在内存中
if(!db.open()) return false;
QSqlQuery query;
query.exec("create table student (no archar(2) ,grade varchar(1),name string(50),id varchar (10)primary key)");
query.exec("insert into student values('1','1', '越前龙马','100102')");
query.exec("insert into student values('1','2', '桃城武','200208')");
query.exec("insert into student values('1','2', '海堂薰','200207')");
query.exec("insert into student values('1','3', '手冢国光','300301')");
query.exec("insert into student values('1','3', '不二周助','300306')");
query.exec("insert into student values('1','3', '大石秀一郎','300302')");
query.exec("insert into student values('1','3', '菊丸英二','300306')");


return true;
}


#endif // DATA_H








运行后显示的是êÖú£1ú1a这样的乱码
离线gylmy
只看该作者 1楼 发表于: 2011-02-15
/* set chinese font */
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk"));
    QFont font("Arial", 10, QFont::Normal, FALSE);
    app.setFont(font);
你在main函数加上这些代码看看行不行
离线314361768

只看该作者 2楼 发表于: 2011-02-16

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
前加一句:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
试试。
离线drylake
只看该作者 3楼 发表于: 2011-02-16
QSqlQuery类的函数为:exec ( const QString & query ),入参为一个QString,你直接输入的是一个字符串数组,Qt没有办法知道你使用的是什么类型的编码格式,因此默认为输入的为Unicode格式。
可以使用QString::fromLocal8Bit()或者QString::fromUtf16()进行转换,再付给QSqlQuery::exec();具体要看你文件使用的是什么编码。
即:
query.exec("QString::fromLocal8Bit("insert into student values('1','3', '菊丸英二','300306')");

离线XChinux

只看该作者 4楼 发表于: 2011-02-16
在代码中直接使用汉字,只需两个步骤:
1、在main中设置字符串编码:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
2、将源代码文件保存成GBK编码格式:

这样就可以了。

不过对于SQL查询,最好使用prepare(),   addBindValue()这样的形式来处理吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个