• 6619阅读
  • 4回复

QT+POSTGRESQL 中文数据处理遇到的问题 [复制链接]

上一主题 下一主题
离线easytarget
 
只看楼主 倒序阅读 楼主  发表于: 2010-09-25
— 本帖被 XChinux 执行加亮操作(2010-10-21) —
我的环境是这样win7+qt4.5+postgresql 8(数据库utf8编码)
query->exec("INSERT INTO mycatlog (cname) values('中国')") 这样可以直接写到数据库里。
select 也会显示正常,也就是没有乱码
但是如果我采用绑定变量的方式,即
query->prepare("insert into mycatlog(cname) values(?)");
QString str="中国";
query->addBindValue(str);
query.exec();
可以正常编译,但执行时返回的错误是编码"GBK"的字符0xade5在"UTF8"没有相对应物;
query->prepare("insert into mycatlog(cname) values(?)");
QString str="中国";
query->addBindValue(str.toUtf8());
query.exec();
上面的进行修改
可以正常编译,但执行时返回的错误是类型“lo”不存在
上面的再进行修改
query->prepare("insert into mycatlog(cname) values(?)");
QString str="中国";
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
query->addBindValue(codec->toUnicode("中国"));
query.exec();
可以正常编译和执行但写到数据库里成了锟叫癸拷

没有解决思路了,请高人指点






离线yj_yulin

只看该作者 1楼 发表于: 2010-09-25
试试
QString str=qstring::fromlocal8bit("中国");
query->addBindValue(str);
离线easytarget
只看该作者 2楼 发表于: 2010-09-25
此方法试过了
可以正常编译,但执行时返回的错误是编码"GBK"的字符0xade5在"UTF8"没有相对应物;
离线yj_yulin

只看该作者 3楼 发表于: 2010-09-25
源代码文件编码是什么?
如果是utf8,则可能是
QString str=qstring::fromutf8("中国");
query->addBindValue(str);

请调试看看,str的内容是否正常,通常是str的内容本身就不正确了.
离线XChinux

只看该作者 4楼 发表于: 2010-10-21
给楼主一个便捷的方法:
1、在main函数中调用
QTextCodec::setCodecForCStrings("xxxx");
或者
2、将源代码保存成xxxx内码格式的文件
这样在使用像 QString str="中国";这样时,就能与系统无缝衔而不需要做多余的转换了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个