Qt 使用QFile 读取写入中文乱码,应该如何转换

想用Qt5.9的QFile内容写入ini保存参数,
但是这里写好了以后发现英文部分正常,但中文部分并不能读取参数,
ini我手动使用txt打开中文部分是“?”,qDebug控制台输出是 不认识的中文字符
网上查询应该是编码格式问题,
项目advanced save option是 GB2312 936格式
代码如下

QFile file(项目路径+/1.ini);
file.open((QIODevice::WriteOnly | QIODevice::Truncate));
QString str = Qt组件中的中文参数(currentText等)+\n;
file.write(str.toLatin1());
file.close();

这里toutf8和tolatin、tolocale8bit已经试过似乎都不支持中文, 请问读取和写入具体应该怎么修改。

查看Qt Creator编码格式是GBK还是UTF-8

1.首先确定写入的格式是GBK还是utf-8,vscode打开右下角有编码格式

2.如果gbk转utf-8代码如下,反之则调换下面两个参数

QByteArray utf8ToGBK(QString str)
{
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
    QTextCodec *gbk = QTextCodec::codecForName("gbk");
    auto strUnicode = utf8->toUnicode(str.toLocal8Bit().data());
    return gbk->fromUnicode(strUnicode);
}

3.用vscode打开左下角有编码格式,一般来说windows平台文件都是gbk的。

把文件转换成utf-8编码格式再试试呢。

INI用QSettings不是更方便,创建QSettings后先用QSettings::setIniCodec设置编码

这样:

img

对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A