使用ODBC,QT,C++编程中遇到的问题
使用ODBC,QT,C++编程中遇到的问题

使用ODBC,QT,C++编程中遇到的问题

又是一学期课设时

新学期新课设,虽然本人代码能力一般,但是对于C++和QT编程有着自己独特的拗劲
凭借着个人兴趣,我每次课设都尽量以C++为编程语言,本文章则记录在coding的过程中遇到的问题

QString与string、char*互转(防止中文乱码)

QT编程中,Qstring与string转换时,如果是中文,则会出现乱码的情况,有时候修改文件编码并不起效,则直接从代码上入手:

  • QString转string
    QString a;
    string b = string(a.toLocal8Bit());
    //或者:
    QString a;
    QByteArray b = a.toLocal8Bit();
    string c = string(b);
  • string转QString
    QString a;
    string b;

    a= QString(QString::fromLocal8Bit(b.data()));

QString与SQLWCHAR*互转(防止中文乱码)

SQL Server采用Unicode编码格式的数据类型(例如NCHAR、NVARCHAR)来支持包含亚洲语言(包括中文)的数据。因此,在查询代码时,必须使用Unicode编码的数据类型。本文问题复现示例中使用的QString是非Unicode编码数据类型,所以导致一般转换过程中出现乱码。解决代码如下:

//将QString类转为SQLWCHAR* 类
inline wchar_t* QString_to_wchar_t_pointer(QString str1) {
	QByteArray cdata = str1.toLocal8Bit();
	string pKey = string(cdata);
	const char* pCStrKey = pKey.c_str();

	//第一次调用返回转换后的字符串长度,用于确认为wchar_t*开辟多大的内存空间
	int pSize = MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, NULL, 0);
	wchar_t* pWCStrKey = new wchar_t[pSize];
	//第二次调用将单字节字符串转换成双字节字符串
	MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, pWCStrKey, pSize);
	return pWCStrKey;
}
starry0214

订阅评论
提醒
guest

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论