当前位置:编程学习 > wap >>

Qt ODBC 操作excel文件,获取表明中文乱码问题

由于excel文件很大,用QAxObject处理非常非常慢,用的是网上下载的ExcelEngine类。所以打算改用odbc,但是遇到了一个问题。
excel的sheet是中文命名的,如图所示


读取代码如下:
dsn = QStringLiteral( "DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;DBQ=%1").arg(strFileName);
m_db.setDatabaseName(dsn);
bool isOpen = m_db.open();
if(isOpen)
{
    qDebug()<<"success open excel file:"<<strFileName;
    m_sheetLists = m_db.tables(QSql::AllTables);
}

其中
m_db是QSqlDatabase 
dsn 和 strFileName是QString
m_sheetLists 是QStringList

结果,用odbc读出来的表格内容变成
引用
("'2013??10??5??15 58$'", "'???????? (root)$'")

所有中文变成乱码

使用的是qt 5.0.2 with vs2010
于是我想是不是编码问题,于是就进行转换,我打算遍历所有编码看看是哪一种

QStringList sheetNameLists = m_db.tables(QSql::AllTables); 
qDebug() << sheetNameLists; 
QList<QByteArray> code = QTextCodec::availableCodecs(); 
for(int j = 0; j < code.size(); ++j) 

  qDebug() << code.value(j) << "-------------------------------------"; 
      for(int i = 0; i < sheetNameLists.size(); ++i) 
  { 
     QTextCodec *codec = QTextCodec::codecForName(code.value(j)); 
     QString  text_str = codec->toUnicode(sheetNameLists.value(i).toLatin1()); 
     qDebug() << text_str; 
  } 
}


运行后输出结果:
引用
"success load" 
("'2013??10??5??15 58$'", "'???????? (root)$'") 
"UTF-8" ------------------------------------- 
"'2013??10??5??15 58$'" 
"'???????? (root)$'" 
"ibm-1208" ------------------------------------- 
"'2013??10??5??15 58$'" 
"'???????? (root)$'" 
"ibm-1209" ------------------------------------- 
"'2013??10??5??15 58$'" 
"'???????? (root)$'" 
"ibm-5304" ------------------------------------- 
"'2013??10??5??15 58$'" 
"'???????? (root)$'" 
"UTF-32LE" ------------------------------------- 
"?????????" 
"????懈???" 
"UTF32_LittleEndian" ------------------------------------- 
"?????????" 
"????懈???" 
"GB2312" ------------------------------------- 
"'2013??10??5??15 58$'" 
"'???????? (root)$'" 
…………………………


发现没有一个是,现在就不清楚如何处理了。
就是在读取表格这里出了问题,在读取内容里面有中文没有什么影响,能正常显示 乱码 编码 odbc excel qt --------------------编程问答-------------------- 亦或者我的转换编码出了问题
--------------------编程问答-------------------- QStringList都已经是乱码,说明获取表名时转码为QString就已经错误。再怎么转都没有用的.
调试一下qsql_odbc.cpp中的qGetStringData函数返回的buf内容.
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,