对字符集为US7ASCII的Oracle库,Qt如何提取显示中文字符?
用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中正常显示出来。 [attachment=4599] (zip格式附件)
以下是选用不同Codec的结果: main.cpp中,codec选用如下的三种,程序有三种不同结果:
一:GB18030或GB2312:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030")); [attachment=4600]
二、Utf8: QTextCodec::setCodecForLocale(QTextCodec::codecForName("Utf8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Utf8")); [attachment=4601]
三、ASCII: QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ASCII")); [attachment=4602]
|