解决QT读Visual Fox Pro DBF中文乱码问题
2017-11-26 18:26
591 查看
开发环境
操作系统:Win10 x64QT:5.5.1 x86
编译器:Microsoft Windows SDK for Windows 7 x64
方案一、使用ODBC读取DBF
前提
QT安装时选择源代码:Source Components-Essentials安装VFP驱动:Visual FoxPro ODBC Driver v6.01.8629.01
1、代码修改
打开C:\Qt\Qt5.5.1\5.5\Src\qtbase\src\sql\drivers\odbc\qsql_odbc.cpp,可以看到在qGetStringData方法中,非unicode数据读取的时候是按utf-8读取的,中文dbf是以gbk编码存储的,gbk编码转成utf-8时如果没有对应字符则以”?”代替,这种转换是有损!这也就是为什么QSqlQuery::value()方法读到的数据无论如何转码也无法正常显示了。为了解决这个问题,代码做如下修改:#include <QTextCodec> //fieldVal += QString::fromUtf8((const char *)buf.constData(), rSize); fieldVal += QTextCodec::codecForName("GB18030")->toUnicode((const char *)buf.constData(), rSize);
2、代码编译
打开cmd,运行:set path=C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin;%path% set INCLUDE=C:\Program Files\Microsoft SDKs\Windows\v7.1\Include;%INCLUDE% set LIB=C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib;%LIB% set path=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;%path% set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;%INCLUDE% set LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib;%LIB% set path=C:\Qt\Qt5.5.1\5.5\msvc2010\bin;%path% set INCLUDE=C:\Qt\Qt5.5.1\5.5\msvc2010\include;%INCLUDE% set LIB=C:\Qt\Qt5.5.1\5.5\msvc2010\lib;%LIB% set path=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;%path% cd C:\Qt\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\odbc qmake odbc.pro nmake
3、替换默认odbc驱动,自行备份
打开cmd,运行:copy /Y C:\Qt\Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers\qsqlodbcd.dll C:\Qt\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers\qsqlodbcd.dll copy /Y C:\Qt\Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers\qsqlodbc.dll C:\Qt\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers\qsqlodbc.dll copy /Y C:\Qt\Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers\qsqlodbcd.lib C:\Qt\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers\qsqlodbcd.lib copy /Y C:\Qt\Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers\qsqlodbc.lib C:\Qt\Qt5.5.1\5.5\msvc2010\plugins\sqldrivers\qsqlodbc.lib pause
直接下载:http://download.csdn.net/download/xinzhengs/10145841
方案二、使用QDbf
QDbf没有对中文支持,需要修改源代码。qdbftable.h
enum Codepage { CodepageNotSet = 0, IBM437, IBM850, IBM866, Windows1250, Windows1251, Windows1252, GB18030, // 这里为增加代码 UnsupportedCodepage };
qdbftable.cpp
static const uchar CODEPAGE_WINDOWS_ANSI_LATIN_1 = 0x03; static const uchar CODEPAGE_GB18030 = 0x7A; // 这里为增加代码 //bool QDbfTablePrivate::setCodepage(QDbfTable::Codepage codepage)中switch (codepage)的default前增加: case QDbfTable::GB18030: byte = CODEPAGE_GB18030; break; //void QDbfTablePrivate::setTextCodec()中switch (m_codepage)的default前增加: case QDbfTable::GB18030: m_textCodec = QTextCodec::codecForNam 4000 e("GB18030"); break; //bool QDbfTable::open(OpenMode openMode)中switch (codepage)的default前增加: case CODEPAGE_GB18030: d->m_codepage = QDbfTable::GB18030; break;
相关文章推荐
- 使用Qt Visual Studio Add-in 实现中文ts文件,解决中文乱码问题
- QT中解决中文乱码问题
- 只需一句话解决qt中文乱码问题,等验证
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
- QT解决中文乱码显示问题
- 解决QT中中文字符乱码问题
- 解决Qt中文乱码问题
- 某些开发版中的Qt Designer菜单等中文显示为乱码问题解决方法初探
- Qt中文乱码问题解决办法【转】
- VS和Qt之解决在控制台下输出中文乱码问题
- 解决dbvisualizer(pro 9.1.1)连接informix(at AIX)SQL或表数据中文显示乱码问题
- Qt做发布版,解决声音和图片、中文字体乱码问题(转)
- 解决 Paste from Visual Studio 插件中文乱码问题
- Qt5.7在AM3358下解决中文乱码显示问题
- Qt 中文字体乱码问题解决
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
- QT如何显示中文,解决乱码问题
- javadbf 实现解决中文乱码问题
- Qt5.7在AM3358下解决中文乱码显示问题
- Qt中文乱码问题解决办法