1 开发环境:
Win8.1(64 bit)
Qt 5.2.1
Qt Creator 3.0.1
2 QString->std::string
QString有转换到std::string的函数( toStdString() ),然而当QString中包含中文时,使用此方法会出现乱码。根据参考资料[3]的说明,可以使用下面的转换方式:
QString strQ("可可西");
std::string strStd = strQ.toStdString();
QTextCodec *code = QTextCodec::codecForName("gb18030");
// 如果code为0,表示在运行的机器上没有装gb18030字符集。
// 不过一般的中文windows系统中都安装了这一字符集
if (code)
strStd= code->fromUnicode(strQ).data();
3 QString->std::string->char*
根据参考资料[1]的说明,可以先将QString转换为std::string,然后再转换为char*:
QString filePath;
std::string strFileName = filePath.toStdString();
const char* cFileName = strFileName.c_str();
缺陷:经过测试发现,当QString中存在中文时,会出现乱码,这时候如果使用cFileName作为文件名打开文件会出错。解决方法:
filePath.toLocal8Bit()
使用上述的转换可以当作文件名,可以成功打开。
4 char* -> QString
根据参考资料[4]的说明,char*中是否包含中文字符的转换方式有所差异:
(1)如果char*中没有中文字符
char *ch = "abcd";
QString strzw(ch);
# or
strzw = ch;
(2)如果char*中含有中文字符
char *ch = "abcd中国";
QString strzw = QString::fromLocal8Bit(ch);