Qt项目-打开文件失败

项目场景:

Qt:项目中文件操作问题:
项目存在读写文件操作,自测发现问题。


问题描述:

测试时发现路径中存在中文时打开失败,而且写中文路径文件也失败,写中文文件乱码。
于是写了测试代码进行测试…

	QString fileName = QFileDialog::getOpenFileName(this, tr("选择文件"), "./",
                                 tr("文件(*.*)"));
    cout << fileName.toStdString() << endl;
    qDebug() << fileName;
    
	fstream file;
    file.open(fileName.toStdString(), fstream::in);
    if(file.is_open())
    {
        cout << "open success" << endl;
        file.close();
    }else
        cout << "open false" << endl;

原因分析:

首先猜测是fstream引发的问题:fstream打开的路径中中文单字符与双字符问题,通过网上search的方案,于是在项目中设置本地编码,并没有解决。
然后意识到并不一定是fstream编码引发的问题,于是写了上述一段测试代码,发现fileName转string时输出的中文是乱码;难道获取的fileName为乱码?于是用qDebug打印了fileName发现QString正常。
那么最终确定就是QString转string时引发的乱码。


解决方案:

QString转string存在中文时的解决方法:

	QString fileName = QFileDialog::getOpenFileName(this, tr("选择文件"), "./",
                                 tr("文件(*.*)"));
    
	//QString 转 string 中文乱码的解决
	QByteArray tmp_array = fileName.toLocal8Bit();
	string tmp_str = string(tmp_array);
	cout << tmp_str << endl;
    
	fstream file;
    file.open(tmp_str, fstream::in);
    if(file.is_open())
    {
        cout << "open success" << endl;
        file.close();
    }else
        cout << "open false" << endl;

你可能感兴趣的:(Qt)