问题描述
我们在开发中有时会遇到这样的功能,就是对文本文件进行读写,读写英文或者数字时都可以正常,但是一遇到中文字符时不论读写都是出现乱码。
QString filePath = QFileDialog :: getOpenFileName(this,tr("请选择txt文件"),"F:",tr("txt文件(*.txt)"));
QFile file(filePath);
file.open(QIODevice::ReadWrite|QIODevice::Text);
cout<<file.readLine().toStdString();
cout<<file.readLine().toStdString()<<endl;
文件内容:
显示内容:
我们可以看到,当文件中出现中文时读出来的就是乱码。
解决方法
可以用QString下的一个方法,toLocal8Bit().
QString filePath = QFileDialog :: getOpenFileName(this,tr("请选择txt文件"),"F:",tr("txt文件(*.txt)"));
QFile file(filePath);
file.open(QIODevice::ReadWrite|QIODevice::Text);
QString tempStr = file.readLine();
cout<<tempStr.toLocal8Bit().toStdString()<<endl;
tempStr = file.readLine();
cout<<tempStr.toLocal8Bit().toStdString()<<endl;
显示内容:
QFile下的readline()方法读出的是QByteArray格式的数据,所以先需要用QString类型的数据先接收再用.toLocal8Bit()方法就能读取出正常的中文字符。