用Qt连接一个oracle数据库,从中取的varchar2字符,用
QString显示,中文都是
乱码,英文和数字显示是正常的。该
数据库的
字符集是US7ASCII(建立起来有些年头了)。
我从精华区XChinux网友的帖子中得到灵感,想到可否先转variant为QByteArray,这中间应该不损失数据,然后转QByteArray为GB2312。
QString ByteArray_to_GB(QByteArray strText)
{
return QString::fromLatin1(strText.data());
}
QString code,inp,nameGB;
QByteArray name;
name = query.value(1).toByteArray(); //toString()?; 问题1
nameGB=ByteArray_to_GB(name); // 问题2
ui.textBrowser->insertPlainText(code+" "+nameGB+" "+inp+"\n");
结果显示出来是乱码(是“?”号,或
其他乱码,具体请见附件或下面我的回帖)。
现在想请教大家的是:1、将query.value(1)中取得的值(variant)转储为什么类型,还是不用转型。
2、将这个值如何变换才能在QString中正常显示出来。
Qt和oracle字符集兼容.zip (53 K) 下载次数:27 (zip格式附件)
以下是选用不同Codec的结果:
main.cpp中,codec选用如下的三种,程序有三种不同结果:一:GB18030或GB2312:QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
二、Utf8:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Utf8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Utf8"));
三、ASCII:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ASCII"));
[ 此帖被adria在2010-12-01 23:39重新编辑 ]