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;
}