QString & std::string & char*之间的转换

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");

if ( code )    // 如果code为0,表示在运行的机器上没有装gb18030字符集。不过一般的中文windows系统中都安装了这一字符集
	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()
    使用上述的转换可以当作文件名,可以成功打开。

参考资料

[1]Qt下 QString转char*

[2]QString 和std::string互转

[3]QString和string互转中文字符

你可能感兴趣的:(QString & std::string & char*之间的转换)