QT开发笔记之QFile写文件中文乱码

问题描述

我们在开发中有时会遇到这样的功能,就是对文本文件进行读写,读写英文或者数字时都可以正常,但是一遇到中文字符时不论读写都是出现乱码。

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()方法就能读取出正常的中文字符。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值