项目场景:
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;